Команда Docker pull не запускается при запуске в Jenkins - PullRequest
0 голосов
/ 16 января 2020

Я пишу конвейер Jenkins, предназначенный для извлечения образа docker из частного реестра. В настоящий момент у меня есть проблема с запуском команды docker pull, поскольку она не запускается при запуске из Jenkins.

В настоящее время конвейер Jenkins работает следующим образом:

  • принимает набор параметров от пользователя (например, имя и тег изображения)
  • запускает отдельный сценарий bash, выполняющий операцию извлечения.

Сценарий bash выполняет две операции:

  • регистрирует в реестре следующее: echo $pwd | docker login -u$username --password-stdin $registryUrl

  • извлекает образ с помощью команды: docker pull $image:$tag

Команда входа успешна, в то время как команда pull отвечает:

Error response from daemon: access denied:
no access to Image Load, on collection swarm

На первый взгляд, я думаю, что это вопрос привилегий пользователя, но запуск сценария bash вне контекста Jenkins ( как владелец процесса Дженкинса) это работает.

Мне не хватает какой-либо конфигурации? В качестве альтернативы я попытался реализовать конвейер Jenkins с помощью Docker Jenkins Plugin API, но он тоже не удался.

Заключительное примечание
Владелец процесса Jenkins отличается от пользователя, заходящего в Docker приватный реестр. Может ли это повлиять на поведение?


Операционная система :

macOS 10.14.6

Docker Сведения о версии :

Client: Docker Engine - Community
 Version:           19.03.4
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        9013bf5
 Built:             Thu Oct 17 23:44:48 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.10
  Git commit:       9013bf5
  Built:            Thu Oct 17 23:50:38 2019
  OS/Arch:          linux/amd64

1 Ответ

0 голосов
/ 16 января 2020

Конвейеры имеют свои собственные команды и приемы для входа в dockerhub. Например,

docker.withRegistry('https://registry.hub.docker.com', 'dockerhub-creds') {
    docker.image('myteam/secretimage:latest').inside() {
        checkout scm
        sh './configure && make && make test'
    }
}

Здесь dockerhub-creds - это учетные данные, которые вы должны создать в самом Jenkins .

Этот метод лучше, чем повторять пароль, потому что:

  1. Пароль будет скрыт в stdout сборки и от других пользователей, которые не имеют доступа к учетным данным

  2. Пароль магически отражается между пользователями, узлами сборки, docker Containers et c и вы не столкнетесь с ситуацией, что «контекст выполнения другой, ничего не работает»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...