Страницы

Поиск по вопросам

понедельник, 18 марта 2019 г.

Выполнение задач в Docker-контейнере в Jenkins

Может ли Jenkins работать так же, как GitLab Runner + Docker executor
Из образа развернуть контейнер. Внутрь контейнера клонировать репозиторий git, выполнить произвольные команды. Выделить артефакты и сохранить их вне контейнера, свернуть контейнер (завершить его работу).
Вопрос: нужна пошаговая инструкция по настройке Jenkins для выполнения трех вышеуказанных шагов.
Нашел Docker Plugin. Вроде бы он умеет разворачивать Jenkins slave в докере, подключать его к мастеру и утилизировать после использования. Этот вариант мне точно не подходит, потому что нужно тащить в сборочное окружение Java и прочие не нужные там вещи. Базовый образ jenkins-slave весит в 100 раз больше alpine, это вообще за гранью разумного.
docker images REPOSITORY ... SIZE alpine ... 3.97 MB evarga/jenkins-slave ... 368 MB
Еще нашел плагин Docker build step. Одна из фич — "create new container from image". Возможно, мне нужно именно это, но я не понимаю, как выполнить пункты 2 и 3.


Ответ

В Jenkins можно выполнить bash/batch команду, для bash это будет примерно так:
docker run -it -d my_image # запускам image в detached моде docker exec $(docker ps -a -q --filter ancestor=my_image) bash -c "cd your_path; your_command" # запускаем Вашу команду в контейнере.
list=$(docker exec $(docker ps -a -q --filter ancestor=my_image) bash -c 'ls /path/to/artifacts/inside/container') # создаем список артефактов, которые мы будем вытаскивать из контенера for i in $list; do docker cp $(docker ps -a -q --filter ancestor=my_image):$i ./path/to/outside container ; done # вытаскиваем артефакты согласно списку
for i in $(docker ps -a -q --filter ancestor=my_image); do docker rm $(docker stop $i); done # удалям контейнеры, если они работают

Комментариев нет:

Отправить комментарий