我一直在尝试从Docker Hub存储库中将私有(自定义)MySQL映像作为服务引入gitlab-ci.yml管道。我添加了一个before_script,尝试使用我的用户名和密码(CI变量)登录dockerhub。失败的构建日志中没有输出提示是否成功登录Docker Hub,但我假设不是因为我的映像提取失败并显示以下消息(编辑:或者甚至从未尝试过,因为gitlab尝试获取服务运行它之前的脚本?):
存储库不存在或可能需要'docker login'(executor_docker.go:168:0s)
我正在使用共享运行器(因为我认为这是使用gitlab.com的唯一选择?) 我已经看到很多关于docker的gitlab ci令牌的提法,但是我没有找到说明如何简化此操作的文档。
我敢肯定,我在搜索中只是忽略了一些东西/不了解或没有找到合适的解决方案,因此如果我没有经验,就在此道歉,并在此先感谢您的帮助。
我的gitlab-ci(Maven变量是因为该项目的构建依赖于私有Maven存储库。数据库和Redis主机变量在运行时注入到我的应用程序中,因此它们知道指向哪个容器)
image: maven:3.5.0-jdk-8
before_script:
- "docker login -u$DOCKER_USER -p$DOCKER_PASS" #pipeline variables
variables:
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
DATABASE_HOST: mysql
REDIS_HOST: redis
services:
- name: privaterepo/private-mysql-schema
alias: mysql
- name: redis:latest
alias: redis
stages:
- build
maven-build:
stage: build
script: "mvn $MAVEN_CLI_OPTS package -B"
artifacts:
paths:
- target/*.jar
答案 0 :(得分:9)
第一件事是设置GitLab CI,以便在需要时提供私有Docker注册表的凭据。为此,您应该遵循specific section in docs,以得到完整的答案
docker login
获取Docker注册表URL,用户名和密码
或其他方式(我不得不花一些时间来找出注册表
docker hub)DOCKER_AUTH_CONFIG
varialbe, {
"auths":{
"registry.hub.docker.com":{
"auth":"xxxxxxxxxxxxxxxxxxxxxxxxxxxx" // base 64 encoded username:password
}
}
}
image: registry.hub.docker.com/ruwanka/helloworld:0.1
中声明图像/服务.gitlab-ci.yml
这应该完全满足拉取图像的要求。 another section in docs列出了允许服务列表的运行程序要求。如果未指定任何内容,那应该没问题,如果不起作用,您可能需要对其进行调整。
最终Yaml如下图
image: registry.hub.docker.com/ruwanka/helloworld:0.1
build:
script:
- echo "hello"
# more steps
services:
- registry.hub.docker.com/ruwanka/helloworld:0.1
gitlab作业日志的片段