Итог: сквозной CI/CD конвейер и Jenkins против альтернатив в 2026

Рейтинг: 74.1% · 11 голосов
Подробный курс по Jenkins и CI/CD: установка и настройка, плагины и Configuration as Code, конвейеры (pipeline) и Jenkinsfile, declarative и scripted, агенты, Docker и Kubernetes, общие библиотеки на Groovy, безопасность и credentials, интеграции (SonarQube, артефакты), траблшутинг. Актуально на 2026.
Ответить
Аватара пользователя
Andrey_CICD
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Итог: сквозной CI/CD конвейер и Jenkins против альтернатив в 2026

Сообщение Andrey_CICD »

Оглавление курса (47)
  1. Что такое Jenkins и зачем нужен CI/CD
  2. Jenkins в 2026: версии, экосистема и сравнение с GitLab CI и GitHub Actions
  3. Архитектура Jenkins: контроллер, агенты, узлы и исполнители
  4. Установка Jenkins: пакеты, Docker и Kubernetes
  5. Первичная настройка Jenkins: мастер, плагины, пользователи
  6. Плагины Jenkins: установка, обновление и ключевой набор
  7. Configuration as Code (JCasC): настройка Jenkins декларативно
  8. Конвейеры Jenkins и Jenkinsfile: pipeline as code
  9. Scripted против Declarative: два синтаксиса конвейера
  10. Структура конвейера: node, stage, steps и первый pipeline
  11. Генератор сниппетов, запуск конвейера и Replay
  12. Типы заданий Jenkins: Freestyle, Pipeline, Multibranch и Organization
  13. Декларативный конвейер: структура pipeline, agent, stages
  14. agent, environment и переменные в конвейере
  15. tools, options, parameters и triggers в декларативном конвейере
  16. stages, parallel и matrix: организация этапов
  17. Условное выполнение when и блок post
  18. Триггеры сборки: webhook от GitHub, SCM polling и расписание
  19. Параметры сборки и пользовательский ввод
  20. Управление потоком: timeout, retry, sleep и waitUntil
  21. Параллелизм и блокировки: parallel, lock, milestone
  22. Постобработка и уведомления о результате сборки
  23. Groovy для Jenkins: основы скриптового конвейера
  24. Скриптовый конвейер: логика, циклы и функции
  25. Общие библиотеки Jenkins: Shared Libraries
  26. Подключение и загрузка общих библиотек
  27. Шаги оболочки: sh, bat, powershell и коды возврата
  28. Переменные среды, withEnv и рабочие пространства
  29. Работа с файлами, артефактами и отпечатками
  30. Сборка проектов в конвейере: Maven, Gradle, npm
  31. Качество кода: SonarQube и покрытие тестами
  32. Управление артефактами: публикация в Nexus и Artifactory
  33. Docker в Jenkins: образы как агенты сборки
  34. Сборка и публикация Docker-образов из конвейера
  35. Jenkins в Kubernetes: динамические pod-агенты
  36. Развёртывание в Kubernetes из конвейера
  37. Безопасность Jenkins: аутентификация и матрица прав
  38. Учётные данные Jenkins: credentials в конвейере
  39. Безопасность сценариев: Groovy sandbox и Vault
  40. Уведомления и отчёты: email, Slack, Telegram, HTML
  41. Blue Ocean и интерфейс Jenkins в 2026
  42. Автоматизация Jenkins: CLI, REST API и script console
  43. Поиск и устранение неисправностей: читаем логи конвейера
  44. Типичные ошибки конвейера: сериализация и неутверждённый код
  45. Эксплуатация Jenkins: бэкап, обновление, масштабирование
  46. Конвертация и миграция: от Freestyle к Jenkinsfile
  47. Итог: сквозной CI/CD конвейер и Jenkins против альтернатив в 2026 (вы здесь)
Ты дошёл до финала. За курс ты собирал конвейер по кусочкам: checkout, сборка, тесты, агенты, секреты, деплой. Беда в том, что в голове это часто остаётся набором разрозненных приёмов, а в проде нужен один цельный поток - от пуша в репозиторий до работающего релиза в кластере, с гейтами качества и аппрувом человека там, где цена ошибки высока. Этот урок сшивает всё вместе. Мы соберём реальный сквозной jenkins ci cd конвейер, а потом честно, без фанатизма, разберём - где Jenkins в 2026 всё ещё король, а где его уже обошли GitLab CI, GitHub Actions и Argo CD. И куда расти дальше, чтобы не застрять.

Сквозной jenkins ci cd конвейер: что мы собираем

Цель - один Jenkinsfile, который проводит коммит через весь путь: вытащить код, собрать приложение и Docker-образ, прогнать тесты, проверить качество в SonarQube с quality gate, запушить образ в реестр, выкатить в Kubernetes, но на прод - только после ручного аппрува, и в конце пнуть Slack. Это и есть тот самый jenkins ci cd пример, который не стыдно показать на собеседовании.

Перед тем как смотреть на pipeline, договоримся про базу 2026 года. Jenkins живёт на LTS-линии 2.5xx; свежие выпуски (2.555.1 и новее) уже требуют Java 21, а Java 17 на них не поддерживается - последняя LTS-база, где ещё держался Java 17, ушла весной 2026. Поэтому контроллер и агенты гоняем на Java 21. Declarative pipeline - стандарт по умолчанию; scripted достаём только там, где нужна настоящая динамика (циклы по списку сервисов, генерация stage на лету). Blue Ocean - наследие, его развитие давно заморожено, новый UI на нём не строим, смотрим в сторону обычного Pipeline-вида и логов.

Логику переиспользования выносим в shared library. В реальном проекте ты не пишешь sh-команды деплоя в каждом репозитории - ты вызываешь deployToK8s() из общей библиотеки, и сотня команд получает одинаковый, проверенный код.

Изображение

Jenkins pipeline целиком: один Jenkinsfile

Вот скелет сквозного конвейера. Агент - эфемерный pod в Kubernetes (про это была отдельная глава), образы и шаги - настоящие.

Код: Выделить всё

@Library('platform-shared@v3') _

pipeline {
  agent {
    kubernetes {
      yaml '''
        apiVersion: v1
        kind: Pod
        spec:
          containers:
          - name: build
            image: maven:3.9-eclipse-temurin-21
            command: ["sleep"]
            args: ["infinity"]
          - name: kaniko
            image: gcr.io/kaniko-project/executor:debug
            command: ["sleep"]
            args: ["infinity"]
      '''
    }
  }

  options {
    timeout(time: 30, unit: 'MINUTES')
    disableConcurrentBuilds()
  }

  environment {
    IMAGE = "registry.cyberlake.ru/shop/api"
    TAG   = "${env.GIT_COMMIT.take(8)}"
  }

  stages {
    stage('Checkout') {
      steps { checkout scm }
    }

    stage('Build & Test') {
      steps {
        container('build') {
          sh 'mvn -B clean verify'
        }
      }
      post {
        always { junit 'target/surefire-reports/*.xml' }
      }
    }

    stage('Quality Gate') {
      steps {
        container('build') {
          withSonarQubeEnv('sonar-prod') {
            sh 'mvn -B sonar:sonar'
          }
        }
        timeout(time: 10, unit: 'MINUTES') {
          waitForQualityGate abortPipeline: true
        }
      }
    }

    stage('Build & Push Image') {
      steps {
        container('kaniko') {
          sh """
            /kaniko/executor \
              --dockerfile=Dockerfile \
              --context=`pwd` \
              --destination=${IMAGE}:${TAG} \
              --destination=${IMAGE}:latest
          """
        }
      }
    }

    stage('Deploy: staging') {
      steps {
        deployToK8s(cluster: 'staging', image: "${IMAGE}:${TAG}")
      }
    }

    stage('Approve: prod') {
      steps {
        timeout(time: 1, unit: 'HOURS') {
          input message: "Катим ${TAG} в прод?", ok: 'Деплой',
                submitter: 'release-team'
        }
      }
    }

    stage('Deploy: prod') {
      steps {
        deployToK8s(cluster: 'prod', image: "${IMAGE}:${TAG}")
      }
    }
  }

  post {
    success { slackSend channel: '#deploys', color: 'good',
              message: "OK ${IMAGE}:${TAG} -> prod" }
    failure { slackSend channel: '#deploys', color: 'danger',
              message: "FAIL ${env.JOB_NAME} #${env.BUILD_NUMBER}" }
  }
}
Разбери по косточкам. Агент описан прямо в pipeline через kubernetes yaml - на каждый запуск рождается свежий pod с контейнерами build и kaniko, после сборки он умирает. Никаких вечно живущих агентов с накопленным мусором. Quality Gate реально блокирует: waitForQualityGate с abortPipeline true завалит сборку, если SonarQube вернул FAILED по порогам. Образ собираем kaniko - без docker.sock и привилегий, что в Kubernetes сейчас норма безопасности. input на проде с submitter - это не косметика: только участник release-team нажмёт кнопку, и есть таймаут на час, чтобы зависший pipeline не держал ресурсы вечно.

Функция deployToK8s живёт в shared library. Минимальный вид файла vars/deployToK8s.groovy:

Код: Выделить всё

def call(Map cfg) {
  withKubeConfig(credentialsId: "kubeconfig-${cfg.cluster}") {
    container('build') {
      sh """
        kubectl set image deployment/api \
          api=${cfg.image} -n shop
        kubectl rollout status deployment/api -n shop --timeout=180s
      """
    }
  }
}
А сам Jenkins описан как код через JCasC - контроллер, плагины, kubernetes-облако и креды не кликаются мышкой, а лежат в YAML и применяются при старте. Фрагмент jenkins.yaml:

Код: Выделить всё

jenkins:
  systemMessage: "Cyberlake CI - managed by JCasC"
  numExecutors: 0
  clouds:
    - kubernetes:
        name: "k8s"
        namespace: "jenkins-agents"
        jenkinsUrl: "http://jenkins.jenkins.svc:8080"
        containerCapStr: "30"
unclassified:
  slackNotifier:
    teamDomain: "cyberlake"
    tokenCredentialId: "slack-token"
Так весь твой jenkins конвейер - от описания контроллера до шагов деплоя - воспроизводим из git. Сломал инстанс - поднял из YAML заново за минуты.

Jenkins vs GitLab, GitHub Actions и Argo: честно в 2026

Главный вопрос практика - стоит ли вообще брать Jenkins сегодня. Отвечаю без религии. Связка jenkins vs gitlab и jenkins против GitHub Actions в 2026 - это не про то, кто круче, а про то, что у тебя за парк и команда.

Где Jenkins силён. Максимальная гибкость - тысячи плагинов, любой экзотический шаг, интеграция с легаси, которого нет в коробке у облачных систем. Полный self-hosted контроль - данные и сборка не уходят наружу, что критично для банков и госсектора. Огромный установленный парк: если у компании уже сотни Jenkins-пайплайнов и инженеры их знают, миграция стоит дороже, чем поддержка.

Где проигрывает. GitLab CI даёт всё в одной платформе - репозиторий, CI, реестр, безопасность, самая глубокая нативная интеграция с Kubernetes через pull-based агента. Берут, когда хотят единый продукт вместо зоопарка. GitHub Actions выигрывает скоростью старта и экосистемой готовых actions - если код уже на GitHub, это путь наименьшего сопротивления, но он же и привязка: репозиторий не на GitHub - и преимущество испаряется. Jenkins за это платит обслуживанием: обновления контроллера, совместимость плагинов, ёмкость агентов - всё на твоих плечах.

И отдельно про деплой. В 2026 типовая архитектура cloud-native команд - это CI-инструмент (любой из трёх) плюс Argo CD на доставке. Argo по факту выиграл слой CD на Kubernetes: drift detection, автоматический откат, мультикластер, паттерн App-of-Apps. Jenkins тут не конкурент Argo, а партнёр - он собирает образ и обновляет манифест в git, а Argo подтягивает изменение в кластер по pull-модели. Если строишь GitOps - не заставляй Jenkins делать kubectl apply на прод напрямую, отдай это Argo, а Jenkins оставь на сборке и тестах.

Как выбирать коротко. Нужен максимальный контроль, есть легаси и DevOps-команда - Jenkins. Хочешь единую платформу с безопасностью из коробки - GitLab CI. Код на GitHub и важна скорость - GitHub Actions. Деплоишь в Kubernetes всерьёз - сверху Argo CD, независимо от выбора CI.

Типичные грабли финального конвейера
  • Quality Gate без waitForQualityGate. Запустить sonar:sonar и забыть про ожидание - сборка зелёная даже при провале порогов. Гейт работает только с waitForQualityGate abortPipeline: true.
  • input внутри агента. Шаг аппрува держит занятым executor и pod всё время ожидания. Выноси input в stage без тяжёлого agent или ставь agent none на pipeline и agent на отдельные stage.
  • Секреты в Jenkinsfile открытым текстом. Токены реестра и kubeconfig - только через credentials и withKubeConfig, никогда не хардкодь и не печатай в echo.
  • Прод-деплой без таймаута на input. Зависший аппрув блокирует пайплайн навечно. Всегда оборачивай в timeout.
  • docker build на docker.sock в кластере. Монтировать сокет демона - дыра в безопасности. В Kubernetes собирай образ kaniko или buildkit без привилегий.
Мини-лаба
  • Возьми любой свой проект и собери Jenkinsfile со стадиями Checkout, Build & Test, Build & Push Image, Deploy staging, Approve prod, Deploy prod.
  • Вынеси деплой в shared library как vars/deployToK8s.groovy и вызови из двух стадий с разными кластерами.
  • Добавь stage Quality Gate с waitForQualityGate (поднимешь SonarQube локально через docker run).
  • Опиши контроллер и kubernetes-облако в jenkins.yaml через JCasC и подними Jenkins из этого файла с нуля.
  • Добавь slackSend в post-блок на success и failure, проверь оба пути - зелёный и красный.
Контрольные вопросы
  • Почему input на проде надо оборачивать в timeout и выносить за пределы тяжёлого агента?
  • Чем waitForQualityGate отличается от простого запуска sonar:sonar и зачем abortPipeline: true?
  • В каких трёх ситуациях ты осознанно выберешь Jenkins, а не GitLab CI или GitHub Actions?
  • Почему в GitOps-связке деплой в кластер лучше отдать Argo CD, а Jenkins оставить на CI?
Итог и напутствие

Ты собрал полноценный jenkins pipeline: код проходит сборку, тесты, гейт качества, упаковку в образ, выкатку в staging, человеческий аппрув и прод, а Slack держит команду в курсе - и всё это описано как код через Jenkinsfile, shared library и JCasC. Это рабочий каркас, который масштабируется на десятки сервисов. Jenkins в 2026 - не модный, но честный инструмент: он даёт контроль и гибкость ценой обслуживания, и для большого парка с легаси это всё ещё сильный выбор. Дальше расти стоит в трёх направлениях: GitOps с Argo CD как слой доставки, DevSecOps - сканеры образов и SBOM прямо в гейтах, и платформенная инженерия - превращение твоего конвейера в самообслуживаемый продукт для других команд. Конвейер ты уже строить умеешь. Теперь строй платформу.
👍4 ❤️1 🔥1 😄 🤔2
Аватара пользователя
grafana6
Сообщения: 1
Зарегистрирован: 31 май 2026, 18:32

Re: Итог: сквозной CI/CD конвейер и Jenkins против альтернатив в 2026

Сообщение grafana6 »

Наконец-то всё сложилось в одну картину, а то по главам было разрозненно. Вопрос: если деплой отдавать Argo, то Jenkins вообще не трогает кластер - только обновляет манифест в git? Хочу убедиться что правильно понял связку.
👍1 ❤️1 🔥1 😄 🤔
Аватара пользователя
knotty101
Сообщения: 1
Зарегистрирован: 30 май 2026, 18:11

Re: Итог: сквозной CI/CD конвейер и Jenkins против альтернатив в 2026

Сообщение knotty101 »

Спасибо за честное сравнение без хайпа. У нас как раз легаси-парк на сотню пайплайнов, и после этого урока стало ясно почему миграцию на GitHub Actions откладываем - дешевле поддерживать. kaniko вместо docker.sock тоже забрал, давно пора было.
👍1 ❤️1 🔥1 😄 🤔
Ответить
← Предыдущая глава
Конвертация и миграция: от Freestyle к Jenkinsfile

Все главы курса «Jenkins: конвейеры CI/CD от основ до продакшена»

Поделиться темой: ✈ Telegram VK
Похожие запросы: что такое jenkins простыми словамикак установить jenkins на linux и в dockerпервичная настройка jenkins после установкикакие плагины jenkins нужны новичкуcicd для начинающих с чего начать на jenkinsjenkinsfile declarative или scripted что выбрать

Вернуться в «Jenkins: конвейеры CI/CD от основ до продакшена»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость