Разверните/запустите приложение из пайплайна Jenkins с докером агента

Я пытаюсь создать образец конвейера (используя декларативный), который создает/тестирует/и развертывает образец (узел) приложения.

Я использую agent docker, который запускает задание в контейнере... этапы конфигурации и тестирования работают нормально:

pipeline {
  agent {
    docker { image 'node:latest' }
  }
  stages {
    stage('config') {
      steps {
        sh 'npm install'
      }
    }
    stage('run test') {
      steps {
        sh 'npm test'
      }
    }

  }

проблема заключается в том, как добавить этап deployment, который по существу создает образ докера и запускает его следующим образом:

docker build -t myapp .
docker run -d myapp

(давайте предположим, что именно так я хочу развернуть/запустить приложение... и иметь Dockerfile)

проблема в том, как развернуть пример приложения (используйте команды докера)... добавление здесь этапа deploy не сработает, так как я использую docker agent (думаю, он запускает докер внутри докера, что звучит неправильно!)

Должен ли я запускать новое задание - после успешного выполнения конвейера - которое использует agent any, который запускает команды развертывания? или есть лучший способ запустить приложение?


person Mahyar    schedule 22.08.2019    source источник


Ответы (1)


Докер внутри докера не является ошибкой, если он сделан правильно! Вы можете смонтировать родительский сокет на узле контейнера:

/var/run/docker.sock:/var/run/docker.sock

В Jenkins перейдите к Manage -> Configure System -> прокрутите до Cloud -> щелкните Docker Agent templates -> Container settings....

вы увидите что-то похожее на картинку ниже:

введите здесь описание изображения

Используйте такое изображение для агента:

FROM jenkins/jnlp-slave
USER root
RUN apt-get update
RUN apt-get -y  install \
                   apt-transport-https \
                   ca-certificates \
                   curl \
                   gnupg2 \
                   software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable"
RUN apt-get update
RUN apt-get -y  install \
               docker-ce \
               docker-ce-cli \
               containerd.io

И для выполнения докера в рамках задания используйте:

withDockerContainer(image: IMAGE_NAME)
{
    ...
}

Полезные ссылки:

https://adamcod.es/2017/08/19/docker-patterns-socket-mount.html https://docs.docker.com/v17.09/engine/reference/commandline/dockerd/#examples

person Jroger    schedule 22.08.2019