Страницы

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

пятница, 24 января 2020 г.

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

#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.
    


Ответы

Ответ 1



В 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 # удалям контейнеры, если они работают

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

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