我正在尝试创建一个管道,在该管道中使用JIB(通过Maven插件)创建docker映像并将其推送到我的Gitlab注册表。
当我登录到docker注册表时,这在本地可以正常工作。
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<allowInsecureRegistries>true</allowInsecureRegistries>
<from>
<image>dockerhost/projectgroup/alpine</image>
</from>
<to>
<image>dockerhost/project/imagename:${project.version}</image>
</to>
<container>
<useCurrentTimestamp>true</useCurrentTimestamp>
</container>
</configuration>
</plugin>
说我有一个.gitlab-ci.yml,它看起来像:
stages:
- build_image
build_image:
stage: build_image
tags:
- dev
script: |
mvn compile jib:build
现在,当管道触发时,我得到一个异常
Build image failed: Failed to authenticate with registry dockerhost/projectgroup/alpine because: peer not authenticated
我假设我收到此错误是因为我没有运行docker login -u [用户名] -p [密码/令牌]
我怎么需要一个使用docker-in-docker映像的.gitlab-ci.yml才能在脚本中运行docker登录?
是否可以使用docker-in-docker映像在我的Gitlab CI上构建该映像?
答案 0 :(得分:1)
使用GitLab,您可以定义秘密环境变量,可用于将注册表凭据传递给Jib。
使用Jib传递注册表凭据
mvn compile jib:build -Djib.to.image=my-container-image:latest -Djib.to.auth.username=$REGISTRY_USER -Djib.to.auth.password=$REGISTRY_PASSWORD
答案 1 :(得分:0)
https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#authentication-methods使用凭据帮助器调出或直接将凭据放置在Maven设置中。尽管将这些凭据称为“ docker凭据助手”,但我不认为这些凭据助手实际上使用了docker守护进程,而是它们只是使用适当的本机存储来存储凭据,并在臂架必须进行身份验证以推送映像时将其传递给臂架的东西。到与Docker API兼容的注册表。
https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#quickstart 将构建到docker守护程序的过程与构建到注册表的过程区分开来,所以我的猜测是,如果您构建到注册表,则不需要可访问的守护程序,这意味着您只需要一个能够运行maven的映像即可。
当然,正是这种模糊,未经检验的建议将您带到了这里。
答案 2 :(得分:0)
您可以使用明确的用户名和密码配置Jib。但是请注意,Jib does not send passwords over unencrypted connections除非明确配置为-DsendCredentialsOverHttp
。
答案 3 :(得分:0)
自GitLab 9.0起,所有necessary variables are available by default:
CI_REGISTRY
-项目注册表的网址CI_REGISTRY_IMAGE
-项目注册表的“基本”映像名称CI_REGISTRY_USER
-可以访问项目注册表的技术用户CI_REGISTRY_PASSWORD
-该用户的密码/令牌这样,您可以使用以下命令来构建和发布图像:
mvn compile jib:build \
-Djib.to.auth.username=${CI_REGISTRY_USER} \
-Djib.to.auth.password=${CI_REGISTRY_PASSWORD} \
-Djib.to.image=${CI_REGISTRY_IMAGE}:latest
您也可以使用Maven settings,就像在Maven注册中心进行身份验证一样。