Если вы начинающий DevOps, эта статья именно для вас. Jenkins позволяет автоматизировать процессы модели CI/CD для крупных проектов или небольшого офиса. Знание данного инструмента, на ряду с аналогичными продуктами, делает из вас специалиста DevOps близкого к профессиональной среде.
Jenkins - это программная система с открытым исходным кодом на Java, предназначенная для обеспечения процесса непрерывной интеграции программного обеспечения по модели CI/CD.
За первоначальные условия примем, что у нас стоит: Nginx + PHP-FPM + MariaDB
Создадим директорию под проект и начнем заполнять docker-compose файл:
mkdir docker cd docker nano docker-compose.yml
Файл внутри содержит следующий код:
version: '3.6' services: jenkins: image: "jenkins/jenkins:lts" container_name: "jenkins_lts" volumes: - ./jenkins_home/:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock:rw - /usr/bin/docker:/usr/bin/docker network_mode: host ports: - 8080:8080 restart: always
Сохраняем. Создаем директорию для проброса "jenkins_home" из контейнера Docker:
mkdir jenkins_home
Получим такую структуру:
tree . ├── docker │ ├── docker-compose.yml │ └── jenkins_home
Из каталога docker запускаем наш файл:
docker-compose up -d Pulling jenkins (jenkins/jenkins:lts)... lts: Pulling from jenkins/jenkins 092586df9206: Pulling fs layer ef599477fae0: Pulling fs layer 4530c6472b5d: Pulling fs layer d34d61487075: Waiting 272f46008219: Waiting ... ce3c0ae47fcb: Pull complete Digest: sha256:bf741663dff2c5c163bd16706d4d1b9e6f86fa7b92e365257e170239d0bfb24f Status: Downloaded newer image for jenkins/jenkins:lts Creating jenkins_lts ... done
Проверяем:
docker images REPOSITORY TAG IMAGE ID CREATED SIZE jenkins/jenkins lts 5721a6cac43c 3 weeks ago 572MB docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9e169611c39e jenkins/jenkins:lts "/sbin/tini -- /usr/…" 7 minutes ago Up 6 minutes jenkins_lts
Заходим на IP нашего сервера и указываем порт 8080:
Все работает. Jenkins просит указать пароль, расположенный по пути:
/var/jenkins_home/secrets/initialAdminPassword
Так как это Docker, чтобы попасть по этому пути, надо зайти в движущийся контейнер:
sudo docker exec -it 9e169611c39e /bin/bash jenkins@debi:/$
После входа в контейнер переходим по пути выше. Контейнер внутри ограничен, он собирается только для Jenkins: это значит, что там нет таких привычных приложений как nano и vim. Поэтому будем использовать командe вывода:
jenkins@debi:/$ cat < /var/jenkins_home/secrets/initialAdminPassword 12e76a43aac14f76b7561df17f73fff6 # Выходим из контейнера exit
После ввода пароля на странице с Jenkins, получаем:
Появляется выбор: поставить плагины по умолчанию, выбрать плагины самому. Мы выбрали по умолчанию:
После установки плагинов по умолчанию, Jenkins попросит указать данные пользователя:
Jenkins is ready! Your Jenkins setup is complete.: Нажимаем "Start using Jenkins"
Поздравляем вас, вы подняли Jenkins из Docker!
Проверяем нашу папку, которую мы пробросили из контейнера:
cd jenkins_home/ ls -la итого 120 drwxr-xr-x 15 debiuser debiuser 4096 окт 22 20:18 . drwxr-xr-x 3 debiuser debiuser 4096 окт 22 17:31 .. -rw-r--r-- 1 debiuser debiuser 129 окт 22 18:08 atomic12517696541344758tmp -rw------- 1 debiuser debiuser 80 окт 22 18:08 .bash_history drwxr-xr-x 3 debiuser debiuser 4096 окт 22 17:38 .cache -rw-r--r-- 1 debiuser debiuser 1647 окт 22 20:18 config.xml -rw-r--r-- 1 debiuser debiuser 100 окт 22 19:40 copy_reference_file.log drwxr-xr-x 3 debiuser debiuser 4096 окт 22 18:06 .groovy -rw-r--r-- 1 debiuser debiuser 156 окт 22 19:41 hudson.model.UpdateCenter.xml -rw-r--r-- 1 debiuser debiuser 370 окт 22 18:06 hudson.plugins.git.GitTool.xml -rw------- 1 debiuser debiuser 1712 окт 22 17:38 identity.key.enc drwxr-xr-x 3 debiuser debiuser 4096 окт 22 17:38 .java -rw-r--r-- 1 debiuser debiuser 7 окт 22 20:18 jenkins.install.InstallUtil.lastExecVersion -rw-r--r-- 1 debiuser debiuser 7 окт 22 20:18 jenkins.install.UpgradeWizard.state -rw-r--r-- 1 debiuser debiuser 182 окт 22 20:17 jenkins.model.JenkinsLocationConfiguration.xml -rw-r--r-- 1 debiuser debiuser 171 окт 22 17:38 jenkins.telemetry.Correlator.xml drwxr-xr-x 2 debiuser debiuser 4096 окт 22 17:38 jobs -rw-r--r-- 1 debiuser debiuser 0 окт 22 19:41 .lastStarted drwxr-xr-x 3 debiuser debiuser 4096 окт 22 17:38 logs -rw-r--r-- 1 debiuser debiuser 907 окт 22 19:41 nodeMonitors.xml drwxr-xr-x 2 debiuser debiuser 4096 окт 22 17:38 nodes drwxr-xr-x 76 debiuser debiuser 12288 окт 22 18:06 plugins -rw-r--r-- 1 debiuser debiuser 64 окт 22 17:38 secret.key -rw-r--r-- 1 debiuser debiuser 0 окт 22 17:38 secret.key.not-so-secret drwx------ 4 debiuser debiuser 4096 окт 22 20:14 secrets drwxr-xr-x 2 debiuser debiuser 4096 окт 22 18:06 updates drwxr-xr-x 2 debiuser debiuser 4096 окт 22 17:38 userContent drwxr-xr-x 3 debiuser debiuser 4096 окт 22 20:14 users drwxr-xr-x 11 debiuser debiuser 4096 окт 22 17:38 war drwxr-xr-x 2 debiuser debiuser 4096 окт 22 18:06 workflow-libs
Для чего нужно было делать проброс? Если контейнер упадет, или перезапустится, по умолчанию он возвращается в первоночальное состояние. Но так как папки с настройками мы храним не внутри контейнера, а на своей рабочей машине, данные подтянутся обратно. Всем спасибо кто читал! Дальше будет обзор Jenkins и DevOps работа на его базе.
Источник: http://linuxsql.ru