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