Docker в Docker - Jenkins Docker Pipeline - как подключиться к внешней службе

У меня следующая установка

  • Дженкинс работает в докер-контейнере
  • в родственном контейнере докера я запускаю частный реестр npm
  • Я использую подключаемый модуль Docker Pipeline и Jenkinsfile для создания библиотеки машинописного текста (с контейнером докеров узла)
  • Я хочу опубликовать эту библиотеку в частном реестре, чтобы иметь возможность использовать ее в других проектах сборки.

Проблема в том, что, поскольку реестр работает на порту на хосте, он не может быть доступен из докера в контейнере докера, который создается скриптом сборки для сборки библиотеки. Я не нашел информации о том, как я могу сделать что-то вроде --net = host (из запуска докера) внутри jenkinsfile. Я думаю, это сработает ?!

Любая идея, как я могу улучшить настройку для сборки через контейнер докеров узла, но иметь возможность публиковать в реестре?


person andymel    schedule 30.06.2020    source источник
comment
Мы успешно используем для этого DNS: зарегистрируем jenkins.internal.yourdomain.com и npm.internal.yourdomain.com и заставим jenkins опубликовать в npm.internal.yourdomain.com .   -  person MaratC    schedule 30.06.2020


Ответы (1)


Я исправил это, подключив все три контейнера (jenkins, npm-registry и контейнер, созданный для сборки) к одной и той же настраиваемой сети докеров.

Когда я настраиваю весь сервер Jenkins с помощью Ansible, я добавил в сценарий ansible следующее:

  • Создаю докер-сеть Jenkins_network
  • Я подключаю контейнер jenkins к этой сети
  • Я подключаю контейнер npm-registry к этой сети

В jenkinsfile я добавил args '--net="jenkins_network"' в блок докеров, который сейчас

pipeline {
  agent {
      docker {
          image 'node:lts-alpine'
          args  '--net="jenkins_network"'
      }
  }
  stages {
  ...
person andymel    schedule 30.06.2020