2017-02-12 22 views
8

Я хочу развернуть платформу непрерывной интеграции на основе Jenkins. Поскольку у меня есть различные проекты (PHP/Symfony, node, angular, ...), и поскольку я хочу, чтобы эти тесты выполнялись как локально, так и на Jenkins, я думал об использовании контейнеров Dockers.Запуск тестов Jenkins в контейнерах Docker из dockerfile в кодовой базе

Процесс я и добиваюсь является:

  • запрос Слияние открыт на Github/Gitlab
  • webhook уведомляет Дженкинс запроса слияния
  • Дженкинс вытягивает репо, строит контейнеры и запускает сценарий оболочки для выполнения тестов
  • После завершения тестов Дженкинс извлекает результаты из одного из контейнеров (через общий том) и обрабатывает результаты.

Я не хочу, чтобы Дженкинс был в контейнере.

С таким процессом я надеюсь, что вы сможете легко запускать тесты на каждой машине для разработчиков с чем-то вроде docker-composer up, а затем в одном из контейнеров ./tests all.

Я не очень хорошо знаком с Дженкинсом. Я прочитал много документации, но большинство из них предложили заранее определить рабов Дженкинса для каждого вида проектов. Я бы хотел, чтобы все было настолько динамичным, насколько это возможно, и требовать от Дженкинса как можно меньше конфигурации.

Я был бы признателен за описание вашего тестового процесса, если вы когда-либо реализовали нечто подобное. Если вы думаете, что я стремлюсь, это невозможно, я также был бы признателен, если бы вы могли объяснить мне, почему.

ответ

3

Установка, которую я предлагаю, - Докер в Докере.

Основание - это производное изображение Докера, которое расширяет изображение jenkins:2.x, добавляя клиент командной строки Docker. Jenkins запускается как контейнер со своей домашней папкой (папка, например,/var/jenkins_home, установленная с хоста Docker) и файл сокета Docker, чтобы иметь возможность запускать контейнеры Docker из заданий сборки Jenkins.

docker run -d --name jenkins -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock ... <yourDerivedJenkinsImage> 

Чтобы проверить, если эта установка работает просто выполнить следующую команду после запуска Jenkins контейнера:

docker exec jenkins docker version 

Если "Докер версия" выход делает НЕ шоу:

Является ли демон docker на этом хосте?

Everythin is fine.

В ваших заданиях на строительство вы можете настроить процесс, упомянутый выше. Пусть Дженкинс просто проверит репозиторий. Репозиторий должен содержать ваши скрипты сборки и тестирования.

Используйте работу по созданию фристайла с выполнением оболочки.Исполнение оболочки может выглядеть следующим образом:

docker run --rm --volumes-from jenkins <yourImageToBuildAndTestTheProject> bash $WORKSPACE/<pathToYourProjectWithinTheGitRepository>/build.sh 

Эта команда просто начинает новый контейнер (для создания и/или тестирование проекта) с объемами от Дженкинс. Это означает, что клонированный репозиторий будет доступен в $ WORKSPACE. Поэтому, если вы запустите «bash $ WORKSPACE/<pathToYourProjectWithinTheGitRepository> /build.sh», ваш проект будет построен в контейнере «yourImageToBuildAndTestTheProject». После этого вы можете запускать другие контейнеры для тестов интеграции или комбинировать их с «docker-compose», установив его на производном изображении Jenkins.

Преимущества - это минимальная конфигурация, которую вы имеете в Jenkins - требуется только конфигурация SCM для клонирования репозитория GIT. Поскольку каждое задание Дженкинса использует клиента Docker напрямую, вы можете использовать для каждого проекта одно или изображение Docker для построения и/или тестирования, БЕЗ еще одна конфигурация Дженкинса.

Если вам нужна дополнительная конфигурация, например. SSH или настройки Maven, просто поместите их на хост Docker и запустите контейнер Jenkins с дополнительными томами, которые содержат эти файлы конфигурации.

Используя эту опцию Docker в исполнении оболочечной заданий сборки:

--volumes-from jenkins 

Автоматически добавляет рабочее пространство и файлы конфигурации для каждого из заданий сборки.