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.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.