我正在尝试创建一条管道,其中使用JIB(通过Maven插件)创建docker映像,然后推到我的gitlab注册表。
当我登录到码头注册表时,本地可以正常工作。
<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
我假设我遇到了这个错误
我是否需要一个.gitlab-ci.yml,它使用docker-indocker image才能在我的脚本中运行docker登录?
是否可以在我的gitlab ci?
由于gitlab 9.0,所有必要的变量默认可用:
-
CI_REGISTRY
-项目注册表的URL -
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设置,就像您通常在Maven注册处进行认证一样。
使用gitlab您可以定义可用于将注册表凭据传递给jib的秘密环境变量。
- 使用gitlab定义秘密变量
使用jib
通过注册表凭证mvn compile jib:build -Djib.to.image=my-container-image:latest -Djib.to.auth.username=$REGISTRY_USER -Djib.to.auth.password=$REGISTRY_PASSWORD
gradle用户:
./gradlew jib
-Djib.to.image=${CI_REGISTRY_IMAGE}:latest
-Djib.to.auth.username=${CI_REGISTRY_USER}
-Djib.to.auth.password=${CI_REGISTRY_PASSWORD}
https://github.com/googlecontainertools/jib/tree/master/jib-maven-maven-plugin-plugin-plugin#authentication-methods-使用凭证助理或直接将信誉放在Maven设置中。尽管称这些" Docker凭据帮助者",但我认为这些凭证助手实际上并不使用Docker守护程序,而是它们只是使用合适的本地商店存储信用的东西,并在jib必须进行身份验证以推动图像时将其传递给JIB到Docker API兼容注册表。
https://github.com/googlecontainertools/jib/tree/master/jib-maven-plugin-plugin#quickstart将建筑物与Docker守护程序区分开来,从建筑物到注册表,因此我猜测,如果您为注册表进行构建,则不需要守护程序,这意味着您只需要一个能够运行Maven的图像。
当然是这种模糊的未经测试的建议,使您在这里首先在这里。
您可以使用明确的用户名和密码配置吉布。但是请注意,除非用-DsendCredentialsOverHttp
进行明确配置。