テストのための GitLab 自動デプロイメント

要件

  • openssl ユーティリティ
  • kubectl
  • task
  • クラスター相互作用ツール(いずれか1つ):
    • gcloud
    • kind

パラメータ

パラメータは環境変数を通して渡されます:

変数名必須デフォルト説明
GITLAB_CHART_VERSIONいいえ最新使用するチャートのバージョン。オペレーターのTAG 内で提供される Chart と一致する必要があります。
GITLAB_CHART_REPOいいえhttps://gitlab.com/gitlab-org/charts/gitlabGitLab ChartリポジトリHTTP URI。主にデフォルトのKinD設定を取得するために使用します。
IMGいいえregistry.gitlab.com/gitlab-org/cloud-native/gitlab-operatorオペレータ コンテナ イメージ名
TAGいいえmasterオペレータコンテナ画像タグ。ほとんどの場合、オーバーライドが必要です。
GITLAB_CHART_DIRyes GitLab Chartレポのクローンへのパス
GITLAB_OPERATOR_DIRいいえ.GitLab Operatorレポのクローンへのパス
GITLAB_OPERATOR_MANIFESTいいえ Operator デプロイ用のマニフェストへのオプションの参照。 空の場合、${GITLAB_OPERATOR_DIR} から自動生成されます。 注意: 適切なイメージとタグを参照するには、IMGTAG 環境変数を設定します。
GITLAB_CR_DEPLOY_MODEいいえselfsignedデプロイのモードを選択:selfsigned またはcertmanager
GITLAB_OPERATOR_DOMAINいいえ ${LOCAL_IP}.nip.io KinD用、cloud-native.win 他のプラットフォーム用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いいえ Runner Token、空の場合は実行中のGitLabインスタンスから自動取得されます。
KINDいいえkindKinDのコマンドライン実行ファイル名
KIND_CLUSTER_NAMEいいえgitlabKinDクラスター名
KIND_IMAGEいいえkindest/node:v1.18.19KinD の--image 引数の値。
KIND_LOCAL_IPはい。 ドメインの証明書などをプロビジョニングするために必要なローカルIP${LOCAL_IP}.nip.io
KUBECTLいいえkubectl kubectl コマンドへのパス
HELMいいえhelm helm コマンドへのパス
TASKいいえtask task コマンドへのパス

ツールポインタ変数 ($KIND,$KUBECTL,$HELM, etc.)

ツールポインタ変数の主な用途は、特定のツールパスやラッパースクリプトへのパスを指定することです(例えば、kubectl に対するk のように)。

これらの変数の別の用途の1つは、デバッグ情報を取得することです:

KUBECTL="echo kubectl" provision_and_deploy.sh deploy_operator

しかし、これはbash -x provision_and_deploy.sh を使うことでも実現できます。

GCP

Cert-Managerを使用した例(gitlab-operator repoのルートから実行):

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

# ...wait for provisioning to complete
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

# ...wait for provisioning to complete
./provision_and_deploy.sh generic_deploy

上記のコマンドは、scripts/ ディレクトリ内部から実行されています(GITLAB_OPERATOR_DIR を使用していることに注意してください)。

自己署名証明書を使ってデプロイすることもできます。その場合は、GITLAB_OPERATOR_DOMAIN ではなく、KIND_LOCAL_IP (”クラスターIP “を使用)を指定します。

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 にナビゲートし、root パスワードでログインできるようになります。

: KinDのIngress用の証明書を生成するためにcert-manager を使用することは、KinDインスタンスが公開されていない限り不可能です。

ランナーのデプロイ

ベースデプロイが完了したら、ランナーデプロイを行います(エクスポートされた変数はそのままです):

scripts/provision_and_deploy.sh runner_deploy

あるいは、すべてを一度に行うこともできます(例としてkind deploy を使用します):

scripts/provision_and_deploy.sh kind_deploy runner_deploy