GitLab 자동 배포 테스트

요구 사항

  • openssl 유틸리티
  • kubectl
  • task
  • 클러스터 상호작용 도구 (다음 중 하나):
    • gcloud
    • kind

매개변수

매개변수는 환경 변수를 통해 전달됩니다:

변수 이름 필수 기본값 설명
GITLAB_CHART_VERSION 아니요 최신 버전 사용할 차트 버전. 운영자의 TAG에서 제공된 차트와 일치해야 합니다.
GITLAB_CHART_REPO 아니요 https://gitlab.com/gitlab-org/charts/gitlab GitLab Helm 차트 저장소 HTTP URI. 주로 기본 KinD 구성 가져오기에 사용됩니다.
IMG 아니요 registry.gitlab.com/gitlab-org/cloud-native/gitlab-operator 운영자 컨테이너 이미지 이름
TAG 아니요 master 운영자 컨테이너 이미지 태그. 대부분의 경우 덮어쓰기가 필요합니다.
GITLAB_CHART_DIR   GitLab 차트 저장소의 복제본 경로
GITLAB_OPERATOR_DIR 아니요 . GitLab 운영자 저장소의 복제본 경로
GITLAB_OPERATOR_MANIFEST 아니요   운영자 배포를 위한 매니페스트에 대한 선택적 참조. 비어 있으면 ${GITLAB_OPERATOR_DIR}에서 자동 생성됩니다. 올바른 이미지 및 태그를 참조하려면 IMGTAG 환경 변수를 설정해야 합니다.
GITLAB_CR_DEPLOY_MODE 아니요 selfsigned 배포 모드를 선택하세요: selfsigned 또는 certmanager
GITLAB_OPERATOR_DOMAIN 아니요 ${LOCAL_IP}.nip.io for KinD, cloud-native.win for other platforms GitLab (운영자) 배포를 위해 사용할 도메인
GITLAB_HOST 아니요 *.${GITLAB_OPERATOR_DOMAIN} GitLab 엔드포인트의 자체 서명 인증서에 사용할 일반 이름
GITLAB_KEY_FILE 아니요 gitlab.key 자체 서명 인증서 키 파일
GITLAB_CERT_FILE 아니요 gitlab.crt 자체 서명 인증서 파일
GITLAB_PAGES_HOST 아니요 *.pages.${GITLAB_OPERATOR_DOMAIN} GitLab Pages 엔드포인트의 자체 서명 인증서에 사용할 일반 이름
GITLAB_PAGES_KEY_FILE 아니요 pages.key 자체 서명 인증서 키 파일
GITLAB_PAGES_CERT_FILE 아니요 pages.crt 자체 서명 인증서 파일
GITLAB_ACME_EMAIL 아니요 git config user.email의 출력 cert-manager에 사용되는 이메일. KinD 배포에서는 필요하지 않습니다.
GITLAB_RUNNER_TOKEN 아니요   러너 토큰. 비어 있으면 실행 중인 GitLab 인스턴스에서 자동으로 검색됩니다.
KIND 아니요 kind KinD의 명령줄 실행 파일 이름
KIND_CLUSTER_NAME 아니요 gitlab KinD 클러스터 이름
KIND_IMAGE 아니요 kindest/node:v1.18.19 KinD의 --image 인수 값
KIND_LOCAL_IP 예, KinD   도메인 ${LOCAL_IP}.nip.io를 위한 인증서 등을 설정하는 데 필요한 로컬 IP
KUBECTL 아니요 kubectl kubectl 명령의 경로
HELM 아니요 helm helm 명령의 경로
TASK 아니요 task task 명령의 경로

도구 포인터 변수 ($KIND, $KUBECTL, $HELM 등)

도구 포인터 변수의 주요 사용 목적은 특정 도구 경로나 래퍼 스크립트의 경로를 가리키는 것입니다 (예: kubectl에 대한 k).

이러한 변수 중 하나의 대체 사용 방법 중 하나는 디버깅 정보를 얻는 것입니다:

KUBECTL="echo kubectl" provision_and_deploy.sh deploy_operator

하지만, 이는 bash -x provision_and_deploy.sh를 사용하여도 달성할 수 있습니다.

GCP

Cert-Manager를 사용한 예제 ( gitlab-operator 리포지토리의 루트에서 실행됨):

export GITLAB_CHART_DIR=~/work/gitlab \
       GITLAB_OPERATOR_DOMAIN="mydomain.k8s-ft.win" \
       GITLAB_ACME_EMAIL="somebody@gitlab.com" \
       GITLAB_CR_DEPLOY_MODE="certmanager"

# https://docs.gitlab.com/charts/installation/cloud/gke.html
PROJECT="gcp-project-123" CLUSTER_NAME="mydomain" \
    bash ${GITLAB_CHART_DIR}/scripts/gke_bootstrap_script.sh up

# ...프로비저닝 완료될 때까지 기다립니다
scripts/provision_and_deploy.sh generic_deploy

또는 파이프라인에서 생성된 CR을 사용할 수 있습니다 (예를 들어 ./123-my-branch.yaml에 다운로드됨):

cd scripts
export GITLAB_CHART_DIR=~/work/gitlab \
       GITLAB_OPERATOR_DIR=~/work/gitlab-operator \
       GITLAB_OPERATOR_MANIFEST=./123-my-branch.yaml \
       GITLAB_OPERATOR_DOMAIN="mydomain.k8s-ft.win" \
       GITLAB_ACME_EMAIL="somebody@gitlab.com" \
       GITLAB_CR_DEPLOY_MODE="certmanager"

PROJECT="gcp-project-123" CLUSTER_NAME="mydomain" \
    bash ${GITLAB_CHART_DIR}/scripts/gke_bootstrap_script.sh up

# ...프로비저닝 완료될 때까지 기다립니다
./provision_and_deploy.sh generic_deploy

위 명령은 scripts/ 디렉터리 내에서 실행되었습니다 ( GITLAB_OPERATOR_DIR의 사용에 유의하세요).

자체 서명된 인증서로 배포할 수 있으며, 이 경우 KIND_LOCAL_IP를 제공해야 하며 ( “클러스터 IP” 사용) GITLAB_OPERATOR_DOMAIN을 제공하지 않아야 합니다.

KinD

기본적으로 배포는 자체 서명된 인증서로 수행됩니다:

export KIND_CLUSTER_NAME=gitlab \
       KIND_LOCAL_IP=192.168.3.194 \
       GITLAB_CHART_DIR=~/work/gitlab

scripts/provision_and_deploy.sh kind_deploy

또는 build manifest 작업에서 생성된 CR을 사용할 수 있습니다 (예를 들어 ./123-my-branch.yaml에 다운로드됨):

export KIND_CLUSTER_NAME=gitlab \
       KIND_LOCAL_IP=192.168.3.194 \
       GITLAB_CHART_DIR=~/work/gitlab \
       GITLAB_OPERATOR_MANIFEST=./123-my-branch.yaml \
       GITLAB_OPERATOR_DIR=~/work/gitlab-operator

scripts/provision_and_deploy.sh kind_deploy

그게 전부입니다! 이제 https://gitlab.(your IP).nip.io로 이동하여 루트 비밀번호로 로그인할 수 있어야 합니다.

참고: KinD에서 Ingress에 대한 인증서를 생성하기 위해 cert-manager를 사용하는 것은 KinD 인스턴스가 공개적으로 액세스 가능한 경우에만 가능합니다.

Runner 배포

기본 배포가 수행된 후, 러너 배포를 수행합니다 (동일한 내보낸 변수를 유지):

scripts/provision_and_deploy.sh runner_deploy

또는 모든 작업을 한 번에 수행하세요 (예를 들어 kind 배포를 사용할 것입니다):

scripts/provision_and_deploy.sh kind_deploy runner_deploy