Создание образов докеров с помощью Jib и Gitlab-CI

Я пытаюсь создать конвейер, в котором образы докеров создаются с помощью JIB (через подключаемый модуль Maven) и помещаются в мой реестр 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

Я предполагаю, что получаю эту ошибку, потому что я не запускал docker login -u [имя пользователя] -p [пароль / токен]

Как вообще мне понадобится .gitlab-ci.yml, который использует образ докера в докере, чтобы иметь возможность запускать логин в докере в моем скрипте?

Есть ли альтернатива использованию образа docker-in-docker для создания этого образа на моем Gitlab CI?


person L. Cooper    schedule 14.02.2019    source источник
comment
(1) Докер для запуска Jib не нужен. Однако я бы предположил, что dockerhost место, откуда вы пытаетесь извлечь / нажать, на самом деле является движком Docker (локальным или удаленным). (2) peer not authenticated - это проблема проверки сертификата SSL.   -  person Chanseok Oh    schedule 03.10.2019


Ответы (4)


Начиная с 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.

person Raphael    schedule 02.12.2020
comment
Это сработало как шарм. Спасибо! - person Jack Sierkstra; 21.12.2020

Используя 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
    
person charlycou    schedule 20.09.2019

https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#authentication-methods вызывает либо с помощью помощников по учетным данным, либо путем размещения кредитов непосредственно в настройках maven. Несмотря на то, что они называются «помощниками по учетным данным докера», я не думаю, что эти помощники по учетным данным на самом деле используют демон докеров, скорее они просто то, что хранит кредиты с использованием соответствующего собственного хранилища и передает их в jib, когда jib должен пройти аутентификацию, чтобы протолкнуть изображение в реестр, совместимый с docker API.

https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#quickstart Отличает сборку демона докера от сборки в реестр, поэтому я предполагаю, что если вы собираете в реестр, вам не нужен доступный демон, что означает, что вам просто нужен образ, на котором можно запустить maven.

Конечно, именно такой расплывчатый, непроверенный совет и привел вас сюда в первую очередь ...

person Disgruntled Goat    schedule 14.02.2019
comment
Спасибо за ваш комментарий. Что касается первого пункта, моя проблема заключается в том, что, как вы сказали, кредиты, похоже, сохраняются и передаются, когда JIB пытается подключиться к реестру. Не уверен, что интерфейс командной строки докера должен быть доступен для JIB, чтобы сделать это. Это один из немногих найденных мной примеров, в котором используется реестр gitlab aboullaite.me/gitlab -registry-jib-java, и он предлагает, но он аутентифицируется с помощью входа в докер со своего локального компьютера. Значит, он не делает этого через конвейер gitlab-ci. - person L. Cooper; 15.02.2019
comment
В статье четко сказано, что: I prefer the combination of Maven setting with Maven password encryption to secure the credentials of my private registries.! Таким образом, конфигурация должна находиться на вашем settings.xml следующим образом: `` ‹server› ‹id› registry.gitlab.com ‹/id› ‹username› Имя пользователя ‹/username› ‹password› ENCRYPTED_PASSWORD ‹/password› ‹/server› ` `` - person Aboullaite; 20.02.2019

Вы можете настроить Jib с явным именем пользователя и паролями. Но обратите внимание, что Jib не отправляет пароли по незашифрованным соединениям, если явно не настроен с -DsendCredentialsOverHttp.

person Brian de Alwis    schedule 20.09.2019