Не удается подключиться к демону докеров при запуске плагина Maven jib в Gitlab CI

Я пытаюсь создать образ докера с моим приложением в непрерывной интеграции Gitlab, используя плагин jib Maven, но я не могу подключить плагин к демону докера с помощью службы dind (docker-in-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, и похоже, что плагин не может найти команду docker в Gitlab CI:

$ docker images && mvn compile jib: dockerBuild / bin / bash: строка 97: docker: команда не найдена

Это конфигурация плагина jib:

<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>

person Xtreme Biker    schedule 17.04.2020    source источник
comment
0.9.11 слишком старый. Попробуйте 2.2.0. И я бы попробовал script: - docker images && mvn compile jib:dockerBuild проверить, находится ли команда docker в PATH.   -  person Chanseok Oh    schedule 17.04.2020
comment
@ChanseokOh обновил мой вопрос.   -  person Xtreme Biker    schedule 19.04.2020
comment
Как я и ожидал, команда docker недоступна в образе. См. мой ответ ниже.   -  person Chanseok Oh    schedule 20.04.2020


Ответы (2)


плагин, похоже, не может найти команду docker в Gitlab CI:

Нет, это не Jib, а /bin/bash не может найти команду docker. Даже до использования Jib у вас нет docker. Внимательно изучите сообщение об ошибке.

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

Например, в моем Linux, если я попробую команду foo, которой нет в сценарии оболочки, она выдаст то же сообщение.

$ /bin/bash -c "foo && mvn -v"
/bin/bash: line 1: foo: command not found

Следовательно, следующая команда без mvn завершится с той же ошибкой.

script:
  - docker images

Это доказывает, что либо docker не существует в вашей среде выполнения GitLab, либо отсутствует в переменной среды PATH.


ОБНОВЛЕНИЕ

Обновляю свой ответ, поскольку вы ответили, что теперь вы используете jib:build вместо jib:dockerBuild.

Если вы используете jib:build, вам даже не понадобится Docker. Jib не требует Docker при создании и отправке образа в удаленный реестр с jib:build. Поэтому о настройке Docker можно полностью забыть и удалить docker:dind и export DOCKER_HOST:

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

person Chanseok Oh    schedule 20.04.2020
comment
Хорошо, я понимаю, что команда недоступна в PATH. Спасибо за ответ, но это только отбрасывает Jib, чтобы вызвать проблему, но не отвечает на ту часть контейнера, которая не может разрешить команду docker .. - person Xtreme Biker; 20.04.2020
comment
Да, я никогда не использовал GitLab, так что это все, что я могу вам сказать. Боюсь, моя помощь на этом заканчивается. Я надеюсь, что кто-нибудь, имеющий опыт работы с GitLab, объяснит, как настроить Docker на GitLab. Возможно, опубликуйте еще один вопрос без Jib (и отметьте этот как дубликат), так как я могу представить, что простое присутствие Jib может отпугнуть некоторых экспертов GitLab, которые никогда не слышали о Jib, или, по крайней мере, запутать их. - person Chanseok Oh; 20.04.2020
comment
Спасибо за советы, вы определенно достойны быть отмеченными хорошим ответом! - person Xtreme Biker; 22.04.2020

Наконец, это конфигурация, с которой я работал:

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 за вашу помощь.

См. также:

person Xtreme Biker    schedule 21.04.2020
comment
Если вы используете jib:build вместо jib:dockerBuild, вам не понадобится Docker. Jib не требует Docker при создании и отправке образа в удаленный реестр с помощью jib:build. Следовательно, вы можете удалить docker:dind и export DOCKER_HOST. - person Chanseok Oh; 22.04.2020