港
GitLab 14.9で導入されました。
Harbor を GitLab プロジェクトのコンテナレジストリとして使用できます。
Harborはオープンソースのレジストリで、KubernetesやDockerのようなクラウドネイティブなコンピュートプラットフォーム全体でアーティファクトを管理するのに役立ちます。
Harborインテグレーションは、GitLab CI/CDとコンテナイメージリポジトリが必要な場合に役立ちます。
前提条件
Harborインスタンスで、以下を確認してください:
- インテグレーションするプロジェクトが作成されていること。
- 認証されたユーザーは、Harborプロジェクトの画像をプル、プッシュ、編集する権限を持っています。
GitLab の設定
GitLabはグループやプロジェクトレベルでのHarborプロジェクトのインテグレーションをサポートしています。GitLabで以下のステップを完了してください:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- 設定]>[インテグレーション]を選択します。
- Harborを選択します。
- インテグレーションを有効にする]で、[アクティブ]チェックボックスを選択します。
- Harbor の設定情報を入力します:
-
Harbor URL:このGitLabプロジェクトにリンクされているHarborインスタンスのベースURL。例えば、
https://harbor.example.net
. -
Harbor プロジェクト名: Harbor インスタンスのプロジェクト名。例えば、
testproject
。 - ユーザー名: Harbor インスタンスでのユーザー名。
- パスワード:ユーザー名のパスワード。
-
Harbor URL:このGitLabプロジェクトにリンクされているHarborインスタンスのベースURL。例えば、
- 変更を保存を選択します。
Harborインテグレーションがアクティブになりました:
- CI/CD 用のグローバル変数
$HARBOR_USERNAME
,$HARBOR_HOST
,$HARBOR_OCI
,$HARBOR_PASSWORD
,$HARBOR_URL
,$HARBOR_PROJECT
が作成されます。 - プロジェクトレベルのインテグレーション設定は、グループレベルのインテグレーション設定を上書きします。
セキュリティに関する考慮事項
Harbor APIへのリクエストのセキュリティ
Harborインテグレーションを介した各APIリクエストについて、Harbor APIへの接続のための認証情報は、username:password
の組み合わせを使用します。以下は安全に使用するための提案です:
- 接続するHarbor APIではTLSを使用してください。
- 認証情報は最小特権の原則に従ってください。
- 資格情報のローテーションポリシーを設定してください。
CI/CD 変数のセキュリティ
.gitlab-ci.yml
ファイルにプッシュされた悪意のあるコードによって、$HARBOR_PASSWORD
を含む変数が危険にさらされ、サードパーティのサーバーに送信される可能性があります。詳細はCI/CD変数セキュリティを参照してください。
CI/CD における Harbor 変数の例
kanikoを使ったDockerイメージのプッシュ
詳細については、Dockerイメージのビルドにkanikoを使用するを参照してください。
docker:
stage: docker
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: ['']
script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"${HARBOR_HOST}\":{\"auth\":\"$(echo -n ${HARBOR_USERNAME}:${HARBOR_PASSWORD} | base64)\"}}}" > /kaniko/.docker/config.json
- >-
/kaniko/executor
--context "${CI_PROJECT_DIR}"
--dockerfile "${CI_PROJECT_DIR}/Dockerfile"
--destination "${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:${CI_COMMIT_TAG}"
rules:
- if: $CI_COMMIT_TAG
OCIレジストリでHelmチャートをプッシュします。
HelmはデフォルトでOCIレジストリをサポートしています。OCIはHarbor 2.0以降でサポートされています。OCIについて詳しくはHelmのブログやドキュメントをご覧ください。
helm:
stage: helm
image:
name: dtzar/helm-kubectl:latest
entrypoint: ['']
variables:
# Enable OCI support (not required since Helm v3.8.0)
HELM_EXPERIMENTAL_OCI: 1
script:
# Log in to the Helm registry
- helm registry login "${HARBOR_URL}" -u "${HARBOR_USERNAME}" -p "${HARBOR_PASSWORD}"
# Package your Helm chart, which is in the `test` directory
- helm package test
# Your helm chart is created with <chart name>-<chart release>.tgz
# You can push all building charts to your Harbor repository
- helm push test-*.tgz ${HARBOR_OCI}/${HARBOR_PROJECT}