Jenkins — это open-source платформа для автоматизации процессов непрерывной интеграции и доставки (CI/CD). Она построена на Java и предлагает гибкую, расширяемую архитектуру для сборки, тестирования и деплоймента приложений в любых средах. Jenkins поддерживает pipeline-as-code, масштабирование через агенты и интеграцию с сотнями внешних систем — от Git и Docker до Kubernetes и Slack.
Возможности Jenkins
- Pipeline-as-Code: декларативное или скриптовое описание пайплайна через
Jenkinsfile; - Интеграции: поддержка SCM (Git, GitHub, GitLab, Bitbucket), облаков (AWS, GCP, Azure), контейнеризации (Docker, Kubernetes) и нотификаций (Slack, Email, Mattermost);
- Автоматизация любых этапов: unit-тесты, сборка артефактов, статический анализ, деплой;
- Поддержка плагинов: более 1800 плагинов для любой задачи — от уведомлений до Helm/CDK/Terraform;
- Параллельные и распределённые сборки: через master-agent архитектуру;
- Управление конфигурацией: через UI, REST API, Groovy-скрипты или Jenkins Configuration as Code (JCasC).
Пример Jenkinsfile (декларативный pipeline)
pipeline {
agent any
environment {
IMAGE_TAG = "${env.BUILD_NUMBER}"
}
stages {
stage('Checkout') {
steps {
git 'https://github.com/my-org/my-app.git'
}
}
stage('Test') {
steps {
sh 'npm ci && npm test'
}
}
stage('Build Docker Image') {
steps {
sh "docker build -t my-app:${IMAGE_TAG} ."
}
}
stage('Push to Registry') {
steps {
withCredentials([usernamePassword(credentialsId: 'docker-creds', passwordVariable: 'PASS', usernameVariable: 'USER')]) {
sh "echo $PASS | docker login -u $USER --password-stdin"
sh "docker push my-app:${IMAGE_TAG}"
}
}
}
}
}
📌 Этот пайплайн делает: git checkout → тесты → сборка Docker-образа → пуш в реестр.
Где запускается Jenkins
- На физических и виртуальных серверах (Linux, Windows, macOS);
- В Kubernetes — через Jenkins Operator или Helm-чарт;
- В облаках — AWS EC2, GCP VM, Azure VM, или через Jenkins X;
- На CI-агентах с Docker-in-Docker — для полной изоляции задач.
Почему Jenkins до сих пор актуален
- Максимальная гибкость — подходит для нестандартных пайплайнов и нестандартных проектов;
- Широкая экосистема плагинов — от статических анализаторов до deployment-менеджеров;
- Развёртывание в изолированной среде — без зависимости от SaaS;
- Поддержка GitOps, Multi-branch pipelines, triggers по Webhook, cron и т.п.
Jenkins — это проверенный временем инструмент, ставший де-факто стандартом в DevOps-инфраструктуре. Особенно популярен там, где важна кастомизация, контроль и независимость от внешних CI/CD-платформ.
Реализация Jenkins-пайплайна с деплоем в Kubernetes через Helm, плюс пример конфигурации Jenkins через код (JCasC) и настройка агентов в Kubernetes.
Jenkinsfile с Helm-деплоем в Kubernetes
pipeline {
agent any
environment {
CHART_DIR = 'helm/my-app'
IMAGE_TAG = "${env.BUILD_NUMBER}"
RELEASE_NAME = "my-app-prod"
KUBE_CONTEXT = "kubernetes-context"
}
stages {
stage('Checkout') {
steps {
git 'https://github.com/my-org/my-app.git'
}
}
stage('Build and Push Docker') {
steps {
sh """
docker build -t ghcr.io/my-org/my-app:${IMAGE_TAG} .
echo "${DOCKER_TOKEN}" | docker login ghcr.io -u "${DOCKER_USER}" --password-stdin
docker push ghcr.io/my-org/my-app:${IMAGE_TAG}
"""
}
}
stage('Helm Deploy to Kubernetes') {
steps {
withKubeConfig([credentialsId: 'kubeconfig-credentials']) {
sh """
helm upgrade --install ${RELEASE_NAME} ${CHART_DIR} \
--namespace production \
--set image.repository=ghcr.io/my-org/my-app \
--set image.tag=${IMAGE_TAG}
"""
}
}
}
}
}
📌 Этот пайплайн клонирует код, билдит образ, пушит его и разворачивает приложение через Helm в Kubernetes.
Пример JCasC (jenkins.yaml)
jenkins:
systemMessage: "Jenkins — CI/CD via as-code"
numExecutors: 2
mode: NORMAL
securityRealm:
local:
allowsSignup: false
users:
- id: admin
password: admin123
authorizationStrategy:
loggedInUsersCanDoAnything:
allowAnonymousRead: false
tools:
jdk:
installations:
- name: "OpenJDK"
home: "/usr/lib/jvm/java-11-openjdk"
nodes:
- name: "k8s-agent"
remoteFS: "/home/jenkins"
launcher:
kubernetes:
yaml: |
apiVersion: v1
kind: Pod
metadata:
labels:
jenkins: agent
spec:
containers:
- name: jnlp
image: jenkins/inbound-agent
args: ["\$(JENKINS_SECRET)", "\$(JENKINS_NAME)"]
📌 Этот файл разворачивает Jenkins с пользователем, executor’ами и агентом в Kubernetes через podTemplate.