如何解决docker登录和测试容器中的Gitlab的CI docker
我有一个项目,需要运行TestContainers来执行end2end测试。 Containers的映像是另一个项目,该映像将docker映像推送到GitLab的Container Registry。这意味着,每当我想对该图像进行docker pull时,都需要先进行docker登录。
在本地工作正常,我只是登录,运行测试,一切正常..管道上的事情是另一回事。
在GitLab's documentation的管道配置文件.gitlab-ci.yml
中,他们使用image: docker:19.03.12
。这样做的问题是我需要运行./gradlew
,并且说图像没有Java才能运行。否则,如果我将映像设置为image: gradle:jdk14
,即使我设置了DockerInDocker,在运行docker login
时,它也表示docker无法识别为命令。
我尝试使用Docker和Java14创建自定义映像,但仍然出现以下错误:
com.github.dockerjava.api.exception.NotFoundException: {"message":"pull access denied for registry.gitlab.com/projects/projecta,repository does not exist or may require 'docker login': denied: requested access to the resource is denied"}
正如您在gitlab-ci文件中看到的那样,它在执行测试之前正在运行docker login,并根据管道的输出是否成功
.gitlab-ci.yml
image: gradle:jdk14
variables:
GRADLE_OPTS: "-Dorg.gradle.daemon=false"
stages:
- build
- test
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
assemble:
stage: build
script:
- ./gradlew assemble
only:
changes:
- "**/*.gradle.kts"
- gradle.properties
cache:
key: $CI_PROJECT_NAME
paths:
- .gradle/wrapper
- .gradle/caches
policy: push
cache:
key: $CI_PROJECT_NAME
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull
test:
stage: test
image: registry.gitlab.com/project/docker-jdk14:latest #<-- my custom image
dependencies:
- checkstyle
services:
- docker:dind
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
script:
- docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
- ./gradlew test
我有一种缺失的感觉,但是到目前为止,我唯一能想到的解释是,正在执行的docker login
管道并未将凭据设置为内部docker实例。
总要在内部实例而不是外部实例中调用登录名吗?
我考虑过要在测试中进行登录调用。.那是我的最后选择。
解决方法
如果我正确阅读了您的问题,则说明您正在尝试为项目gitlab.com/projects/projectb
运行CI,该项目在测试期间会使用项目gitlab.com/projects/projecta
中内置的图像。
您正尝试使用用户名和密码从预定义变量registry.gitlab.com/projects/projecta
和$CI_DEPLOY_USER
中提取图像$CI_DEPLOY_PASSWORD
。
它不起作用,因为该用户仅具有访问gitlab.com/projects/projectb
的权限。您需要做的是为项目gitlab.com/projects/projecta
创建具有访问注册表权限的部署令牌,通过自定义变量将其提供给gitlab.com/projects/projectb
中的CI,然后使用这些令牌登录$CI_REGISTRY
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。