使用Jib和Gitlab-CI构建docker映像

时间:2019-02-14 05:10:13

标签: docker gitlab gitlab-ci jib

我正在尝试创建一个管道,在该管道中使用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上构建该映像?

4 个答案:

答案 0 :(得分:1)

使用GitLab,您可以定义秘密环境变量,可用于将注册表凭据传递给Jib。

  1. Define secret variables using 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
    

答案 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注册中心进行身份验证一样。