- 전제 조건
- OpenShift 클러스터 프로비저닝
- 리포지터리 포크
- 환경 설정
- OpenShift 클러스터 설정
- 리포지터리 설정
- RedHat Connect 포털에서 프로젝트 설정
- 파이프라인 설정
- 번들 생성
- 제출용 번들 주석 달기
- 포크된 리포지터리로 변경 내용 복사 및 푸시
- 인증 파이프라인 실행
- 정리
RedHat 오퍼레이터 번들 인증 프로세스
이 문서는 RedHat Marketplace를 위한 OLM 번들 제출을 위한 인증 프로세스를 개요로 설명합니다. 이는 Red Hat Software Certification Workflow Guide를 기반으로 합니다.
아래 프로세스는 전체 설정을 위한 인증을 개요로 합니다.
전제 조건
- GitHub 계정이 필요합니다.
- 개인 계정을 사용할 수 있습니다.
- 서비스 계정(예:
gl-distribution-oc
)을 사용할 수 있습니다.- SSH 키페어가 필요합니다.
-
편의를 위해
operator_certification.sh
을 사용할 수 있습니다 (gldoc_github
를 사용해야 합니다):#!/bin/sh OC_SSH_KEYFILE=${OC_SSH_KEYFILE:-"${HOME}/.ssh/gldoc_github"} export GIT_SSH_COMMAND="ssh -i ${OC_SSH_KEYFILE} -o IdentitiesOnly=yes" exec $@
-
olm-bundle.sh
전제 조건:task
operator-sdk
yq
opm
OpenShift 클러스터 프로비저닝
기존 클러스터를 확인하고, 이미 설정된 클러스터가 있을 수 있습니다.
기존 OpenShift 클러스터가 필요합니다. 이미 프로비저닝된 OpenShift 클러스터를 사용하는 경우 단계를 조정하십시오. 클러스터에 설치해야 하는 필수 컴포넌트:
-
cert-manager
(오퍼레이터 요구 사항) - OpenShift Pipelines (인증 파이프라인 요구 사항)
- (옵션)
external-dns
(CI에서 필수임)
OpenShift 프로비저닝 파이프라인
새 OpenShift 클러스터를 프로비저닝하는 한 가지 방법은 OpenShift 프로비저닝 파이프라인을 사용하는 것입니다.
파이프라인은 클러스터에 대한 인증 정보와 모든 필요한 이진 파일을 포함하는 편리한 artifact를 생성합니다. deploy_cluster
작업이 생성한 artifact의 Zip 파일을 다운로드하고 일부 편리한 위치(${HOME}/mycluster
)로 압축 해제하십시오.
BASEDIR=${HOME}/mycluster
OC=${BASEDIR}/bin/oc-x.y.z
TKN=${BASEDIR}/bin/tkn
KUBECONFIG=${BASEDIR}/x.y.z/auth/kubeconfig
export OC TKN KUBECONFIG
매뉴얼 프로비저닝
새 클러스터를 프로비저닝하려면 OpenShift 설치 문서를 참조하십시오. 다음을 추출하고 보존해야 합니다:
- OCP 릴리스에 해당하는
oc
바이너리- RedHat 파일 미러 참조
- 릴리스와 호환되는
tkn
바이너리 다운로드- 예: 4.9 릴리스 노트의 문서
- Chapter 21. Running the certification test suite locally의 전제 조건 섹션 참조
- Teknton CD 요구 사항
- 설치 루트 디렉터리 하위의
auth
디렉터리의 내용
OC=/path/to/oc
TKN=/path/to/tkn
KUBECONFIG=/path/to/kubeconfig
export OC TKN KUBECONFIG
리포지터리 포크
다음 중 하나를 fork해야 합니다:
현재 GitHub 사용자에 대해 fork해야 합니다.
배포 키 생성
빈 암호구문으로 SSH 키페어를 생성하십시오.
ssh-keygen -f certified-operators-key
fork된 리포지터리에 대해 Deploy Keys
(Settings
/Deploy keys
/Add new
for the repo)를 생성하고, certified-operators-key.pub
을 추가하십시오.
환경 설정
위의 일부 설정 및 나중에 필요한 설정을 사용하여 쉘 설정을 위한 my.env
파일을 생성하는 것이 유용할 수 있습니다.
VERSION="0.11.0"
# 파이프라인
export KUBECONFIG=/path/to/secure/location/kubeconfig
CLUSTER_DIR=/path/to/clusters/clusterX
export OC=${CLUSTER_DIR}/bin/oc-x.y.z
export TKN=${CLUSTER_DIR}/bin/tkn
# RH Connect 포털에서 Pyxis API 키 생성하거나
# 1Password(opeartor-secrets.yaml)에서 찾기
export PYXIS_API_KEY_FILE=pyxis-key-operator-bundle.txt
# fork된 리포지터리의 배포 키(섹션 "리포지터리 포크" 참조)
# 또는 'gl-distribution-oc'을 사용하는 경우 - 1Password(깃허브 오퍼레이터 인증 전용 키)에서 얻기
export SSH_KEY_FILE=gl-distribution-oc/gl-distribution-oc-deploy
# fork된 리포지터리의 GitHub API 키(섹션 "리포지터리 포크" 참조)
# 또는 'gl-distribution-oc'을 사용하는 경우 - 1Password(깃허브 오퍼레이터 인증 API 토큰)에서 얻기
export GITHUB_TOKEN_FILE=gl-distribution-oc/gh-token.txt
# 아래 섹션은 'gl-distribution-oc' GitHub 사용자를 기본 값으로 가정합니다.
# 다른 GitHub 계정을 사용하는 경우 - 이에 맞게 조정하십시오.
export GIT_USERNAME="gl-distribution-oc"
export GIT_EMAIL="dmakovey+operator-certification@gitlab.com"
export GIT_FORK_REPO_URL="git@github.com:gl-distribution-oc/certified-operators.git"
export GIT_BRANCH="gitlab-operator-kubernetes-${VERSION}"
# 상위 스트림 리포지터리에서 오퍼레이터 번들로 가는 경로
export OPERATOR_BUNDLE_PATH="operators/gitlab-operator-kubernetes/${VERSION}"
참고 여기서 기본적으로 gl-distribution-oc
사용자를 사용하고 있으며, 다른 사용자로 설정하려는 경우 위의 설정을 조정하십시오.
다음 명령어를 실행하기 전에 명령어를 실행하기 전에 my.env
파일을 소스로 사용했는지 확인하십시오.
source my.env
OpenShift 클러스터 설정
redhat/operator-certification/scripts/operator_certification_pipeline.sh \
create_cluster_infra
redhat/operator-certification/scripts/install_oco.sh create_manifest \
apply_manifest
리포지터리 설정
API 토큰 (PAT) 생성
GitHub에서 프로필 설정으로 이동하여 Developer settings
/Personal access tokens
로 이동하여 새로운 (“classic”) 토큰을 repo
범위로 생성하십시오. 안전한 위치(${HOME}/secure/github_api_token.txt
)에 로컬 파일로 저장하십시오.
참고 이 토큰은 이 시점에서 GitHub 사용자의 모든 리포지터리에 액세스 권한이 있습니다.
리포지터리 클론
REPO_HOME=${HOME}
pushd ${REPO_HOME}
git clone git@github.com:<YOUR-GITHUB-ACCOUNT>/certified-operators.git
git checkout -b gitlab-operator-kubernetes-${VERSION}
popd
환경에 CATALOG_REPO_CLONE
을 추가하여 나중에 참조할 수 있도록 추가하십시오:
export CATALOG_REPO_CLONE=${REPO_HOME}/certified-operators
RedHat Connect 포털에서 프로젝트 설정
Gitlab Operator Bundle
로 이동하여 Settings
탭을 엽니다.
GitHub 사용자를 Authorized GitHub user accounts
에 추가하십시오.
파이프라인 설정
전제 조건
-
프로비저닝된 OpenShift 클러스터를 아래와 같은 파일을 가지고 있어야 합니다:
- 관련된
kubeconfig
파일 ($KUBECONFIG
) - 연결된
tkn
바이너리 ($TKN
) - 연결된
oc
바이너리 ($OC
)
- 관련된
- GitHub PAT (
$GITHUB_TOKEN_FILE
)- 1Password: GitHub API 토큰 찾기
- Pyxis API 토큰 (
$PYXIS_API_KEY_FILE
)은 RedHat에서 가져와야 합니다.- 1Password:
operator-secrets.yaml
에서 추출해야 합니다.
- 1Password:
- SSH 키페어 (
$SSH_KEY_FILE
- 비공개 키 파일)- fork된 프로젝트에 “배포 키”로 추가되었습니다.
- 1Password: 깃허브 배포 키 찾기
참고 파일 $GITHUB_TOKEN_FILE
및 $PYXIS_API_KEY_FILE
에 개행 문자가 포함되지 않도록 확실하게 하십시오(0x0a
로 끝나는 파일):
hexdump -C $GITHUB_TOKEN_FILE
hexdump -C $PYXIS_API_KEY_FILE
그런 다음 다음 명령어를 실행하십시오. 시크릿 생성 및 파이프라인 설치:
GITHUB_TOKEN_FILE=/path/to/github_token.txt \
PYXIS_API_KEY_FILE=/path/to/pyxis_api_key.txt \
SSH_KEY_FILE=/path/to/certified-operators-key \
KUBECONFIG="${BASEDIR}/auth/kubeconfig" \
redhat/operator-certification/scripts/operator_certification_pipeline.sh create_secrets install_pipeline_automated create_workspace_template
번들 생성
OSDK_BASE_DIR=".build/cert" \
DOCKER="podman" \
OLM_PACKAGE_VERSION=${VERSION} \
OPERATOR_TAG=${VERSION} \
scripts/olm_bundle.sh build_manifests generate_bundle patch_bundle
제출용 번들 주석 달기
BUNDLE_DIR=.build/cert/bundle \
redhat/operator-certification/scripts/configure_bundle.sh adjust_annotations adjust_csv
포크된 리포지터리로 변경 내용 복사 및 푸시
이 시점에서 번들을 새 위치로 복사해야 합니다(fork repo
의 CATALOG_REPO_CLONE
값이 필요합니다):
cp -r .build/cert/bundle ${CATALOG_REPO_CLONE}/operators/gitlab-operator-kubernetes/${VERSION}
( cd ${CATALOG_REPO_CLONE} && git add operators/gitlab-operator-kubernetes/${VERSION} \
&& git commit -am "Add gitlab-operator-${VERSION}" \
&& git push origin gitlab-operator-kubernetes-${VERSION})
인증 파이프라인 실행
GitHub 사용자 이름 및 이메일을 얻어야 하며, 이를 각각 GIT_USERNAME
및 GIT_EMAIL
에 사용해야 합니다.
redhat/operator-certification/scripts/operator_certification_pipeline.sh \
run_certification_pipeline_automated
이렇게 하면 업스트림 PR이 생겨나며 RH 포털에서 제출이 열립니다.
참고: 출력에서
ValueError: Invalid header value b'Bearer XXXXXXXXXXXXXXXXXXXXXXX\n'
를 받는 경우 - 아마도 비정상적인 개행 문자를 포함한 비밀 값(pyxis-api-secret
또는 github-api-token
) 중 하나 때문일 것입니다. 오류의 내용을 통해 어느 것인지 확인할 수 있습니다.
정리
파이프라인이 완료된 후 개인 중심적 비밀 값을 삭제하는 것이 좋은 생각입니다:
redhat/operator-certification/scripts/operator_certification_pipeline.sh cleanup_secrets