- 전제 조건
- OpenShift 클러스터 프로비저닝
- 리포지토리 포크
- 환경 설정
- OpenShift 클러스터 설정
- 레포 설정
- RedHat Connect 포털에서 프로젝트 설정
- 파이프라인 설정
- 번들 생성
- 제출용 번들 주석 처리
- 변경 사항 복사 및 푸시
- 인증 파이프라인 실행
- 정리
RedHat Operator Bundle 인증 프로세스
이 문서는 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
(Operator 요구 사항) - OpenShift Pipelines(인증 파이프라인 요구 사항)
- (옵션)
external-dns
(CI에서 필수입니다)
OpenShift 프로비저닝 파이프라인
새 OpenShift 클러스터를 프로비저닝하는 한 가지 방법은 OpenShift 프로비저닝 파이프라인을 사용하는 것입니다.
파이프라인은 클러스터에 대한 인증 정보뿐만 아니라 모든 필요한 바이너리를 포함하는 편리한 아티팩트를 생성합니다. deploy_cluster
작업에 의해 생성된 아티팩트를 포함하는 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
리포지토리 포크
다음 중 하나를 포크해야 합니다:
현재의 GitHub 사용자를 위해.
GitHub UI를 사용하여 포크를 만듭니다.
배포 키 생성
비밀번호를 비워둔 SSH 키파일을 만듭니다:
ssh-keygen -f certified-operators-key
포크된 리포지토리를 위해 배포 키
를 만듭니다 (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(operator-secrets.yaml)에서 위치를 찾습니다.
export PYXIS_API_KEY_FILE=pyxis-key-operator-bundle.txt
# 포크된 리포지토리에 대한 배포 키(위의 "리포지토리 포크" 섹션 참조)
# 또는 'gl-distribution-oc'을 사용하는 경우 - 1Password(GitHub Operator Certification deploy key)에서 확인합니다.
export SSH_KEY_FILE=gl-distribution-oc/gl-distribution-oc-deploy
# 포크된 리포지토리에 대한 GitHub API 키(위의 "리포지토리 포크" 섹션 참조)
# 또는 'gl-distribution-oc'을 사용하는 경우 - 1Password(GitHub Operator Certification API token)에서 확인합니다.
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}"
# upstream 리포지토리 내의 연산자 번들 경로
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
로 이동하고 스코프가 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 토큰 검색
- RedHat에서 얻은 Pyxis API 토큰 (
$PYXIS_API_KEY_FILE
)- 1Password:
operator-secrets.yaml
에서 추출해야 함
- 1Password:
- SSH 키 페어 (
$SSH_KEY_FILE
- 개인 키 파일)- fork된 프로젝트에 “배포 키”로 추가됨
- 1Password: GitHub 배포 키 검색
참고 $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 PREVIOUS_OPERATOR_VERSION="x.y.z" \
redhat/operator-certification/scripts/configure_bundle.sh adjust_annotations adjust_csv
변경 사항 복사 및 푸시
이 단계에서 번들을 새 위치로 복사해야 합니다 (CATALOG_REPO_CLONE
의 값을 fork repo에서 찾아야 합니다.):
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 "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
이는 upstream PR을 생성하고 RH 포털에서 제출을 엽니다.
참고 출력에서
ValueError: Invalid header value b'Bearer XXXXXXXXXXXXXXXXXXXXXXX\n'
를 받는 경우 - Secrets 중 하나에 원치 않는 새 줄이 포함됨: pyxis-api-secret
또는 github-api-token
, 오류의 내용이 어떤 것인지 확인하여 결정해야 합니다.
정리
파이프라인이 완료된 후 개인 중심의 비밀을 삭제하는 것이 좋습니다:
redhat/operator-certification/scripts/operator_certification_pipeline.sh cleanup_secrets