Готовим Jenkins CI в Docker

Для большей изоляции и переносимости Jenkins рекомендую запускать его в контейнере, для этого проще всего использовать готовое решение docker-jenkinsci. Ниже расскажу как запустить его, настроить Nginx и перенести данные.
Установка
Можете использовать мой немного исправленный форк docker-jenkinsci, но лучше сделайте свой со своими настройками. После чего склонируйте к себе на сервер:
cd ~example git clone cd docker-jenkinsci
Доустановите Nginx, Docker и Docker Compose:
sudo apt install nginx docker.io docker-compose
Настройка Nginx
Подключим сертификаты и будем проксировать на localhost:8080 (или какой угодно другой адрес, указанный в docker-compose.yml)
server { listen 443 ssl; server_name jenkins.example.org; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; auth_basic "closed site"; # Рекомендую прятать Jenkins за base-auth, в Jenkins часто находят уязвимости, продукт популярный. Общая Basic Auth это дополнительная безопасность auth_basic_user_file htpasswd; # Ниже показываю как сгенерировать этот файл, который Nginx будет искать в /etc/nginx location / { proxy_set_header Authorization ""; # Тут мы сбрасываем заголовок с Basic Auth, иначе Jenkins пытается его использовать для авторизации пользователя в своем интерфейсе. Я разделяю эти авторизации для себя proxy_pass } } server { listen 80; server_name jenkins.example.org; return 301 }
Как получить бесплатные SSL-сертификаты от LetsEncypt читаем в статье.
Для генерации htpasswd файла выполните:
echo "<USERNAME>:`openssl passwd -apr1`" > /etc/nginx/htpasswd
Укажите нужный вам <USERNAME>.
Установка Jenkins в Docker
Запускаем Jenkins:
docker-compose up
Во время запуска, в консоли отобразиться пароль, скопируйте и введите его в поле "Administrator password" веб-интерфейса (по адресу ).
Вас спросят какие плагины установить, советую выбрать "Select plugins to install" и выбрать минимальный подходящий вам набор (Git, Build Timeout и прочие на которых стоит галочка и вы осознаете для чего выбранный плагин вам нужен, остальное доустановите потом).
Далее вас попросят создать учетную запись "Create First Admin User", думаю справитесь.
Авто-запуск Jenkins в Docker
Теперь вы можете запускать Jenkins в бекграунде:
docker-compose up -d
Или лучше разместите сервис-файл для systemd по пути /etc/systemd/system/docker-jenkinsci.service:
[Unit] Description=Docker Compose Service for Jenkins CI Requires=docker.service After=docker.service [Service] WorkingDirectory=/home/example/docker-jenkinsci ExecStart=/usr/bin/docker-compose up ExecStop=/usr/bin/docker-compose down TimeoutStartSec=0 Restart=on-failure [Install] WantedBy=multi-user.target
Теперь активируем и запустим наш сервис:
sudo systemctl enable docker-jenkinsci
sudo systemctl start docker-jenkinsci
Вы также можете узнать статус, остановить или перезапустить сервис:
sudo systemctl status docker-jenkinsci
sudo systemctl stop docker-jenkinsci
sudo systemctl restart docker-jenkinsci
Не забывайте после каждого изменения service-файла перезапускать systemd:
systemctl daemon-reload
Перенос рабочих файлов для Jenkins
По умолчанию имя запущенного контейнера "docker-jenkinsci_master_1", поэтому ниже будет использовано именно это имя.
Если у вас имеется сожержимое каталога от прежнего Jenkins (jobs, workspaces, конфиги), то можно закинуть все эти данные в volume:
cat var_lib_jenkins.tgz | docker exec -i docker-jenkinsci_master_1 tar Cxzf /var/jenkins_home/ -
После чего, вы можете войти в контейнер и проверить правильно ли вы разместили данные:
docker exec -uroot -ti docker-jenkinsci_master_1 bash cd ~jenkins
Далее перезапустите Jenkins и проверьте корректность работы через веб-интерфейс:
systemctl restart docker-jenkinsci
Бекап данных
Чтобы сдампить все файлы из volume контейнера можно использовать docker cp:
docker cp -a docker-jenkinsci_master_1:/var/jenkins_home backup_dir
Задавайте свои вопросы в комментариях.
Комментарии
Оставьте свой комментарий