Jenkins
Jenkins - мощный инструмент создания и управления процессами CI/CD.
Ключевые возможности продукта:
- Создание полноценного конвейера автоматизации процессов разработки и внедрения программного продукта. Реализовано это через создание задач (jobs), которые могут самостоятельно забирать новый код из репозетория, проводить его проверку, делать сборку кода, последующее его тестирование, производить сливание веток протестированного кода, компилировать готовые для прода проекты, разворачивать готовый продукт.
- Интеграция с большинством инструментов автоматизации CI/CD и IAaC, таких как: SCM системы (Git), сборщики проектов (Maven, Gradle), системы управления конфигурацией (Ansible), системы управления контейнерами (Docker, Kubernetes).
- Непосредственное выполнение задач может происходить на различных типах окружения: статические агенты (виртуальные и реальные машины), динамические агенты (Docker, Kubernetes)
- Имеется полноценная система управления правами доступа и пользователями. Создано большое количество разнообразных плагинов, расширяющих возможности данного ПО.
Архитектура Jenkins
Jenkins — это Java-приложение. У него есть контроллер или Master Mode — управляющий центр, который занимается планированием задач. Он запускает задачи согласно установленному расписанию на слэйвах, которые вы к нему прикрепили. Помимо этого контроллер хранит логи наших задач. Вся история хранится только на Master Mode, поэтому важно помнить о настройке правильной ротации логов.
Слэйвы или агенты — это то, что непосредственно выполняет сами задания.
Коротко их взаимодействие можно описать так: контроллер запускает задачу и говорит агенту выполнить её, агент выполняет задачу и возвращает результат контроллеру. Контроллер получает результат и сохраняет его в build-логе.


Jenkins jobs
Freestyle Job - это один из типов задач (jobs) в системе непрерывной интеграции Jenkins. Позволяет создавать гибкие и настраиваемые сценарии сборки и автоматизации процессов. Freestyle Jobs предоставляют множество опций для настройки, включая выбор сборщика, настройку параметров, добавление сценариев сборки и действий после сборки. Основное преимущество этого типа задач - имеет простой синтаксис, фактически скрипт на BASH.
Jenkins Pipeline Job - тип задач в Jenkins. Задачи описываются описываются специальным синтаксисом, помещаются в файлы Jenkinsfile, которые храняться в SCM-системах, типа Git. Внутри Pipeline состоит из стадий (stages) и шагов (steps).
Declarative Pipeline
Declarative Pipeline - это более структурированный и ограниченный способ определения пайплайнов, который призван облегчить создание и управление сложными CI/CD процессами. Он использует декларативный синтаксис, что означает, что пайплайн определяется с использованием ключевых слов и блоков, что делает его более читаемым и легко поддерживаемым.
pipeline {
agent any //выбор агентов для запуска
stages {
stage('Build') { //определение stage
steps {
// //выполнение определенных действий
}
}
stage('Test') {
steps {
//
}
}
stage('Deploy') {
steps {
//
}
}
}
}
Scripted Pipeline
Scripted Pipeline предоставляет более высокую степень гибкости и контроля, но требует написания скриптов на языке Groovy.
node {
stage('Build') {
//
}
stage('Test') {
//
}
stage('Deploy') {
//
}
}
Multibranch Pipeline
Multibranch Pipeline - это мощный инструмент в Jenkins, который позволяет автоматизировать создание и управление множеством CI/CD пайплайнов для множества веток (branches) в системе управления версиями, такой как Git. Это особенно полезно в сценариях, где у вас есть множество веток в репозитории кода, и вы хотите автоматически создавать и запускать CI/CD пайплайны для каждой ветки.
Вот ключевые особенности Multibranch Pipeline:
- Автоматическое обнаружение веток: Multibranch Pipeline автоматически обнаруживает и создаёт пайплайны для каждой ветки в репозитории кода. Например, если у вас есть ветки "main", "develop", "feature-1", "feature-2" и др., Multibranch Pipeline создает и управляет соответствующими пайплайнами для каждой из них.
- Конфигурация в Jenkinsfile: Для каждой ветки в репозитории должен быть определен Jenkinsfile, который описывает, какой CI/CD пайплайн следует создать и выполнить. Это обеспечивает контроль версий и автоматизацию для каждой ветки.
Запуск Jenkins с помощью Docker-compose
services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
user: root
networks:
- jenkins_network
ssh-agent:
image: jenkins/ssh-agent
container_name: ssh-agent
networks:
- jenkins_network
volumes:
jenkins_home:
networks:
jenkins_network:
driver: bridge
Теперь нужно получить пароль администратора для первоначальной настройки Jenkins