在Gitlab CI中运行Maven三角臂插件时无法连接到docker守护程序

我正在尝试使用三角臂Maven插件在Gitlab中使用我的应用程序持续集成来构建docker映像,但是我无法使用Dind(docker-in-docker)服务将该插件连接到docker守护进程。目前,我在gitlab-ci.yml文件中使用此配置:

deploy:mvn:
  image: maven:3.6.3-jdk-8-openj9
  stage: deploy
  services:
    - docker:dind
  script:
    - mvn compile jib:dockerBuild

这是我得到的错误:

[错误]无法执行目标 com.google.cloud.tools:jib-maven-plugin:0.9.11:dockerBuild (default-cli)在项目my-application上:构建到Docker守护程序失败, 也许您应该确保已安装Docker并且您有正确的 运行它的特权-> [帮助1]


更新

我更新到2.2.0,它在本地运行。我之前添加了docker images命令,插件似乎无法在Gitlab CI中找到docker命令:

$ docker images && mvn编译jib:dockerBuild / bin / bash:第97行: docker:找不到命令

这是三角帆插件的配置:

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>2.2.0</version>
    <configuration>
        <from>
            <image>adoptopenjdk/openjdk11:alpine-jre</image>
        </from>
        <to>
            <image>my-application:latest</image>
        </to>
        <container>
            <entrypoint>
                <shell>sh</shell>
                <option>-c</option>
                <arg>chmod +x /entrypoint.sh &amp;&amp; sync &amp;&amp; /entrypoint.sh</arg>
            </entrypoint>
            <ports>
                <port>8080</port>
            </ports>
            <environment>
                <SPRING_OUTPUT_ANSI_ENABLED>ALWAYS</SPRING_OUTPUT_ANSI_ENABLED>
                <JHIPSTER_SLEEP>0</JHIPSTER_SLEEP>
            </environment>
            <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
        </container>
    </configuration>
</plugin>
ly13644593292 回答:在Gitlab CI中运行Maven三角臂插件时无法连接到docker守护程序

该插件似乎无法在Gitlab CI中找到docker命令:

否,找不到/bin/bash命令的不是Jib,而是docker。甚至在使用Jib之前,您都没有docker。仔细查看错误消息。

$ docker images && mvn compile jib:dockerBuild /bin/bash: line 97: docker: command not found

例如,在Linux上,如果我尝试执行Shell脚本中不存在的命令foo,则会输出相同的消息。

$ ./a.sh
./a.sh: line 4: foo: command not found

因此,以下不带mvn的命令将因相同的错误而失败。

script:
  - docker images

这证明docker在您的GitLab运行时环境中不存在,或者不在PATH环境变量中。


更新

更新我的答案,因为您answered现在使用jib:build而不是jib:dockerBuild

如果使用jib:build,则甚至不需要Docker。使用jib:build构建映像并将其推送到远程注册表时,Jib不需要Docker。因此,您完全可以忘记设置Docker并删除docker:dindexport DOCKER_HOST

mvn compile jib:build -Djib.to.auth.username=$DOCKER_REGISTRY_USER -Djib.to.auth.password=$DOCKER_REGISTRY_PWD

,

最后这是我使用的配置:

services:
    - docker:dind


deploy:mvn:
    image: maven:3.6.3-jdk-8-openj9
    stage: deploy
    script:
        - export DOCKER_HOST=tcp://docker:2375
        - mvn compile jib:build -Djib.to.auth.username=$DOCKER_REGISTRY_USER -Djib.to.auth.password=$DOCKER_REGISTRY_PWD
    only:
        - tags

除了在Docker服务中使用Docker外,我还需要建立DOCKER_HOST环境变量并将凭证传递给我的mvn jib:build命令。我将凭据存储在CI设置中作为环境变量。谢谢@Chanseok Oh的帮助。

另请参见:

本文链接:https://www.f2er.com/2417509.html

大家都在问