我正在尝试理解文档:
- https://docs.gitlab.com/ee/ci/yaml/#image
特别是:
- https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#access-an-image-from-a-private-container-registry
所以我写了下面的.gitlab-ci.yml
:
# https://docs.gitlab.com/ee/ci/yaml/script.html#set-a-default-before_script-or-after_script-for-all-jobs
default:
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
build windows:
tags:
- powershell
- windows2022
stage: build
script:
- docker build
--tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}
--build-arg WSCI_VERSION=ltsc2022
-f demo/Dockerfile .
- docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}
test windows:
tags:
- powershell
- windows2022
variables:
GIT_STRATEGY: none
stage: test
script:
- docker pull ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}
- docker image inspect ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}
Upload Windows packages:
tags:
- docker
- windows2022
variables:
GIT_STRATEGY: none
stage: deploy
image: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
script:
- dir
字符串
行before_script
从未被调用,因此无法访问在image:
行上指定的映像。
当我从一个私有仓库中指定了一个显式的image:
时,我该如何登录?它看起来不像是在我的私有gitlab设置中设置的DOCKER_AUTH_CONFIG
。
以下是错误消息以供参考:
Using Docker executor with image gitcloud.acme.com/repo/project:cd370af73fb5058cdb251262c1805fd7246c99ee ...
Authenticating with credentials from C:\Windows\system32\config\systemprofile\.docker\config.json
Pulling docker image gitcloud.acme.com/repo/project:cd370af73fb5058cdb251262c1805fd7246c99ee ...
WARNING: Failed to pull image with policy "always": Error response from daemon: Head "https://gitcloud.acme.com/v2/repo/project/manifests/cd370af73fb5058cdb251262c1805fd7246c99ee": unauthorized: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead of a password. See https://gitcloud.acme.com/help/user/profile/account/two_factor_authentication#troubleshooting (manager.go:237:0s)
型
如果我理解正确,从私有存储库访问映像的正确方法记录在:
- https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#determine-your-docker_auth_config-data
然而,这个文档似乎暗示我知道密码。这不是我的情况,作为一个简单的用户,我只是用途:
${CI_REGISTRY_USER} / ${CI_JOB_TOKEN}
型
2条答案
按热度按时间91zkwejq1#
正如您在文档中发现的那样,您必须为您的项目或运行程序设置
DOCKER_AUTH_CONFIG
(或这里描述的方法之一)。然而,这个文档似乎暗示我知道密码。这不是我的情况,作为一个简单的用户,我只是使用[作业令牌]
为此,您需要为您的私有注册表生成凭据。在GitLab容器注册表的情况下,这被描述为in the authentication documentation,这意味着以下之一:
然后,您将使用其中一个令牌在项目中创建
DOCKER_AUTH_CONFIG
变量,如您链接的文档中所述。js4nwp542#
多亏了sytech,我重新阅读了文档,并创建了一个部署令牌,似乎在我的情况下工作。
以下是我今天做的事情,供以后参考:
创建部署令牌(无用户名):
的数据
更新测试阶段以转储以下额外值:
字符串
现在我们有了完整的json,创建预期的变量
DOCKER_AUTH_CONFIG
如下:的
如果部署阶段失败,只需重新启动值
DOCKER_AUTH_CONFIG
就可以正确读取了。