Harbor

  • Tier: 基础版,专业版,旗舰版
  • Offering: JihuLab.com,私有化部署

你可以将 Harbor 用作极狐 GitLab 项目的容器镜像仓库。

Harbor 是一个开源的镜像仓库,它可以帮助你在 Kubernetes 和 Docker 等云原生计算平台上管理产物。

如果你需要极狐 GitLab CI/CD 和一个容器镜像仓库,Harbor 集成可以帮助你。

先决条件#

在 Harbor 实例中,确保:

  • 已创建要集成的项目。
  • 已认证的用户有权限在 Harbor 项目中拉取、推送和编辑镜像。

配置极狐 GitLab#

极狐 GitLab 支持在群组或项目级别集成 Harbor 项目。在极狐 GitLab 中完成以下步骤:

  1. 在左侧边栏中,选择 搜索或转到 并找到你的项目。

  2. 选择 设置 > 集成

  3. 选择 Harbor

  4. 启用集成 下,选择 激活 复选框。

  5. 提供 Harbor 配置信息:

    • Harbor 地址:正在与此极狐 GitLab 项目链接的 Harbor 实例的基础 URL。例如,https://harbor.example.net
    • Harbor 项目名称:Harbor 实例中的项目名称。例如,testproject
    • 用户名:你在 Harbor 实例中的用户名,应符合先决条件中的要求。
    • 密码:你的用户名的密码。
  6. 选择 保存更改

激活 Harbor 集成后:

  • 全局变量 $HARBOR_USERNAME$HARBOR_HOST$HARBOR_OCI$HARBOR_PASSWORD$HARBOR_URL$HARBOR_PROJECT 被创建用于 CI/CD 使用。
  • 项目级别的集成设置将覆盖群组级别的集成设置。

安全注意事项#

保护你对 Harbor API 的请求#

对于通过 Harbor 集成的每个 API 请求,你连接到 Harbor API 的凭据使用 username:password 组合。以下是安全使用的建议:

  • 在你连接的 Harbor API 上使用 TLS。
  • 遵循最小权限原则(对 Harbor 的访问)来使用你的凭据。
  • 对你的凭据有一个轮换策略。

CI/CD 变量安全#

推送到你的 .gitlab-ci.yml 文件的恶意代码可能会危及你的变量,包括 $HARBOR_PASSWORD,并将其发送到第三方服务器。有关更多详细信息,请参阅 CI/CD 变量安全

在 CI/CD 中使用 Harbor 变量的示例#

使用 kaniko 推送 Docker 镜像#

有关更多信息,请参阅 使用 kaniko 构建 Docker 镜像

yaml
1docker: 2 stage: docker 3 image: 4 name: gcr.io/kaniko-project/executor:debug 5 entrypoint: [''] 6 script: 7 - mkdir -p /kaniko/.docker 8 - echo "{\"auths\":{\"${HARBOR_HOST}\":{\"auth\":\"$(echo -n ${HARBOR_USERNAME}:${HARBOR_PASSWORD} | base64 -w 0)\"}}}" > /kaniko/.docker/config.json 9 - >- 10 /kaniko/executor 11 --context "${CI_PROJECT_DIR}" 12 --dockerfile "${CI_PROJECT_DIR}/Dockerfile" 13 --destination "${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:${CI_COMMIT_TAG}" 14 rules: 15 - if: $CI_COMMIT_TAG

使用 OCI 镜像仓库推送 Helm chart#

Helm 默认支持 OCI 镜像仓库。Harbor 2.0 及更高版本支持 OCI。

yaml
1helm: 2 stage: helm 3 image: 4 name: dtzar/helm-kubectl:latest 5 entrypoint: [''] 6 variables: 7 # Enable OCI support (not required since Helm v3.8.0) 8 HELM_EXPERIMENTAL_OCI: 1 9 script: 10 # Log in to the Helm registry 11 - helm registry login "${HARBOR_URL}" -u "${HARBOR_USERNAME}" -p "${HARBOR_PASSWORD}" 12 # Package your Helm chart, which is in the `test` directory 13 - helm package test 14 # Your helm chart is created with <chart name>-<chart release>.tgz 15 # You can push all building charts to your Harbor repository 16 - helm push test-*.tgz ${HARBOR_OCI}/${HARBOR_PROJECT}