使用域方法在 GitLab Community Edition 14.2.4 中启用 Container Registry 的具体步骤是什么,以及如何将 docker 镜像推送到 registry?另外,如何将 GitLab CI 与注册表集成?
仅指定以下字符串,如“在其域下配置容器注册表”中所述不适用于 GitLab Community Edition 14.2.4
registry_external_url 'registry.gitlab.example.com'
这是一个自答题,我将指导您完成在 GitLab Community Edition 14.2.4 中启用 Container Registry 以及如何推送 Docker 镜像的步骤。
第 1 步: 为了启用 Container Registry,我使用了域方法(在 here 描述的现有域下的配置)。编辑 /etc/gitlab/gitlab.rb 文件并添加以下代码行:
registry_external_url 'https://registry.example.com'
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = "registry.example.com"
registry['enable'] = true
registry['registry_http_addr'] = "localhost:5000"
registry['log_directory'] = "/var/log/gitlab/registry"
registry['env_directory'] = "/opt/gitlab/etc/registry/env"
registry_nginx['enable'] = true
registry_nginx['listen_port'] = 443
registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/registry.example.com/fullchain.pem"
registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/registry.example.com/privkey.pem"
添加这些行后,运行
gitlab-ctl reconfigure
。请注意,我尝试了不同的方法,包括仅指定 registry_external_url
URL,但在我使用上述设置之前没有任何效果。在这篇文章中我跳过了安全认证的步骤,这个步骤可以用不同的方式来完成。我使用了为注册表预先生成和指定的 Let's Encrypt 证书。更多信息在这里
第 2 步: 启用 Container Registry 后,您可以通过导航到 Project -> Packages & Registries -> Container Registry 在 GitLab 中找到它。在空白页面上,您会找到帮助命令以开始使用注册表。
第 3 步: 要将 GitLab CI 与 Container Registry 集成,请将以下代码添加到您的 .gitlab-ci.yml 文件中:
create-image:
stage: build
tags:
- shell
variables:
VER: 1.0-${CI_PIPELINE_ID}
ID: ${CI_COMMIT_SHORT_SHA}
GIT_SUBMODULE_STRATEGY: recursive
before_script:
- echo "Docker registry url is $CI_REGISTRY"
- echo "Docker registry username is $CI_REGISTRY_USER"
- echo "Docker registry repo is $CI_REGISTRY_IMAGE"
timeout: 12h
script:
- docker build -t ${CI_REGISTRY_IMAGE}:$VER ${CI_PROJECT_DIR}
upload-to-registry:
stage: deploy
when: manual
tags:
- shell
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker push ${CI_REGISTRY_IMAGE}:$VER