用吉布和吉特拉布-CI构建Docker图像



我正在尝试创建一条管道,其中使用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?

上使用docker-indocker映像来构建此图像

由于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的秘密环境变量。

  1. 使用gitlab定义秘密变量
  2. 使用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进行明确配置。

最新更新