英文:
How to enable GitLab Container Registry and push docker image in it
问题
如何在GitLab Community Edition 14.2.4中使用域名方法启用容器注册表,并如何将Docker镜像推送到注册表?另外,如何将GitLab CI与注册表集成?
只需按照“配置容器注册表使用其域名”中所述,将以下字符串指定为:
registry_external_url 'registry.gitlab.example.com'
英文:
What are the exact steps to enable Container Registry in GitLab Community Edition 14.2.4 using the domain method, and how can I push a docker image to the registry? Also, how can I integrate GitLab CI with the registry?
Specifying only the following string as described in "Configure Container Registry under its domain" not working for GitLab Community Edition 14.2.4
registry_external_url 'registry.gitlab.example.com'
答案1
得分: 1
这是一个自我回答的主题,我将指导您完成在GitLab社区版14.2.4中启用容器注册表以及如何推送Docker映像的步骤。
第1步: 为了启用容器注册表,我使用了域方法(在现有域的配置下,详见此处)。编辑您的/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步: 启用容器注册表后,您可以在GitLab中找到它,方法是导航到项目 -> 软件包和注册表 -> 容器注册表。在空白页面上,您将找到有关如何开始使用注册表的帮助命令。
第3步: 要将GitLab CI与容器注册表集成,将以下代码添加到您的.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
英文:
This is a self-answering topic, I will guide you through the steps to enable Container Registry in GitLab Community Edition 14.2.4 and how to push a Docker image.
Step 1: To enable Container Registry, I used the domain method(configuration under existing domain described here). Edit your /etc/gitlab/gitlab.rb file and add the following lines of code:
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"
After adding these lines, run gitlab-ctl reconfigure
. Note that I tried different approaches, including specifying only the registry_external_url
URL, but nothing worked until I used the above setup. In this article I skipped the security certification steps, this step could be done differently. I have used Let's Encrypt certificates pre-generated and specified for the registry. More information here
Step 2: Once Container Registry is enabled, you can find it in GitLab by navigating to Project -> Packages & Registries -> Container Registry. On the empty page, you will find help commands to start working with the registry.
Step 3: To integrate GitLab CI with Container Registry, add the following code to your .gitlab-ci.yml file:
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论