RedHat Operator Bundle 인증 프로세스

이 문서는 RedHat Marketplace를 위한 OLM 번들 제출의 인증 프로세스를 설명합니다. 이 프로세스는 Red Hat Software Certification Workflow Guide에 기반합니다.

아래 프로세스는 인증을 위한 전체 설정을 설명합니다.

사전 요구 사항

  1. GitHub 계정이 필요합니다.

    1. 개인 계정을 사용할 수 있습니다.

    2. 서비스 계정(예: gl-distribution-oc)을 사용할 수 있습니다.

      1. 적절한 작동을 위해 SSH 키 쌍이 필요합니다.

      2. 편의상 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 $@
        
  2. olm-bundle.sh 사전 요구 사항:

    1. task
    2. operator-sdk
    3. yq
    4. opm

OpenShift 클러스터 프로비저닝

기존 클러스터를 확인해 주세요 - 이미 설정된 클러스터가 있을 수 있습니다.

기존 OpenShift 클러스터가 필요합니다. 이미 프로비저닝된 OpenShift 클러스터를 사용하는 경우 단계에 맞게 조정하세요. 클러스터에서 설치해야 할 필수 구성 요소:

  • cert-manager (Operator Requirement)
  • OpenShift Pipelines (Certification pipeline requirement)
  • (옵션) external-dns (CI에서 필수)

OpenShift 프로비저닝 파이프라인

새 OpenShift 클러스터를 프로비저닝하는 한 가지 방법은 OpenShift-provisioning pipeline을 사용하는 것입니다.

파이프라인은 클러스터에 대한 인증 정보와 모든 필수 바이너리가 포함된 편리한 아티팩트를 생성합니다. 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 설치 문서를 따라 새 클러스터를 프로비저닝하세요. 반드시 추출하여 보존해야 하는 것들:

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

포크된 리포지토리에 대해 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(operator-secrets.yaml)에서 찾기
export PYXIS_API_KEY_FILE=pyxis-key-operator-bundle.txt

# 포크된 리포지토리에 대한 배포 키 ( "Fork repo" 섹션 참조)
# 또는 'gl-distribution-oc' 사용 - 
# 1Password( GitHub Operator Certification deploy key)에서 얻기
export SSH_KEY_FILE=gl-distribution-oc/gl-distribution-oc-deploy

# 포크된 리포지토리에 대한 GitHub API 키 
# ( "Fork repo" 섹션 참조)
# 또는 '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}"

# 상위 리포지토리 내의 경로를 오퍼레이터 번들로 지정
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에서 프로필 설정으로 이동하여 개발자 설정/개인 액세스 토큰에서 범위 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로 이동하여 설정 탭을 엽니다.

인증된 GitHub 사용자 계정에 GitHub 사용자를 추가합니다.

파이프라인 설정

사전 요건

  • 프로비저닝된 OpenShift 클러스터를 보유하고 있어야 하며:
    • 관련된 kubeconfig 파일 ($KUBECONFIG)
    • 관련된 tkn 바이너리 ($TKN)
    • 관련된 oc 바이너리 ($OC)
  • GitHub PAT ($GITHUB_TOKEN_FILE)
    • 1Password: GitHub API 토큰을 찾으세요
  • RedHat에서 얻은 Pyxis API Token ($PYXIS_API_KEY_FILE)
    • 1Password: operator-secrets.yaml에서 추출해야 합니다
  • SSH 키 쌍 ($SSH_KEY_FILE - 개인 키 파일)
    • 포크된 프로젝트에 “배포 키”로 추가됨
    • 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의 값을 포크 리포지토리에서 가져와야 함):

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_USERNAMEGIT_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