Harbor Container Registry 集成

使用 Harbor 作为极狐GitLab 群组或项目的容器镜像库。

Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全,提升用户使用 Registry 构建和运行环境传输镜像的效率。

Harbor 容器镜像库集成对于使用 GitLab CI 并需要 Container Registry 的用户非常有用。

先决条件

在 Harbor 实例中,请确保:

  • 要集成的 Harbor 项目已创建。
  • 登录用户需要具有在该项目中拉取、推送、编辑镜像的权限。

配置极狐GitLab

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

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目:
  2. 选择 设置 > 集成
  3. 选择 Harbor。
  4. 启用集成 下,选择 启用
  5. 提供以下 Harbor 配置信息:
    • Harbor URL:要集成的 Harbor 实例的 base URL,例如 https://harbor.example.com
    • Harbor 项目名称:在 Harbor 实例中,要集成的 Harbor 项目的名称。
    • Harbor 用户名:Harbor 用户的名称。用户需满足先决条件中的要求。
    • Harbor 密码:Harbor 用户的密码。
  6. 选择 保存修改

Harbor 集成激活后:

  • 将创建全局变量 $HARBOR_USERNAME$HARBOR_HOST$HARBOR_OCI$HARBOR_PASSWORD$HARBOR_PROJECT$HARBOR_URL 供 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 镜像

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 chart

Helm 默认支持 OCI 库。Harbor 2.0 及更高版本支持 OCI。在 Helm 的博客文档中阅读有关 OCI 的更多信息。

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}