Гайды

Jenkins: декларативные пайплайны

Jenkinsfile, agent и Docker, credentials, Shared Libraries и эксплуатация мастера.

~9 мин чтения

Jenkins: декларативные пайплайны

Jenkins — сервер CI с pipeline as code (Jenkinsfile в репозитории). Declarative Pipeline — структура pipeline { agent, stages, post }. Альтернативы — CI/CD: GitLab и GitHub Actions; артефакты часто в Docker — Docker: контейнеризация.


1. Минимальный Jenkinsfile

groovy
pipeline {
    agent any
    options {
        timestamps()
        timeout(time: 30, unit: 'MINUTES')
    }
    stages {
        stage('Checkout') {
            steps { checkout scm }
        }
        stage('Test') {
            steps {
                sh 'python -m pip install -r requirements.txt'
                sh 'pytest -q'
            }
        }
        stage('Build image') {
            when { branch 'main' }
            steps {
                sh 'docker build -t myapp:${GIT_COMMIT} .'
            }
        }
    }
    post {
        failure { echo 'notify slack' }
    }
}

2. Agent и Docker

groovy
agent {
    docker { image 'python:3.12' args '-u root' }
}

Или kubernetes {} pod template для агентов в k8s.


3. Credentials

withCredentials([usernamePassword(...)]) — не логировать значения.

Параметры сборки (parameters { string(name: 'TAG', defaultValue: 'main') }) и buildDiscarder в options делают историю билдов предсказуемой. Для артефактов используйте archiveArtifacts или публикацию в Nexus/Artifactory, а не только workspace агента.


4. Shared Libraries

Вынесение Groovy в отдельный git-репозиторий для переиспользования шагов между командами.


5. Плюсы и минусы

ПлюсыМинусы
Гибкость, плагиныЭксплуатация мастера, безопасность плагинов
Зрелая модель правGroovy порог входа выше YAML Actions

6. Безопасность и стабильность

Настройте Script Approval и права на запуск, чтобы непроверенный Groovy из PR не получал полный доступ к агенту. Replay на prod-джобах лучше запретить политикой. В agent { docker {} } не монтируйте Docker socket без изоляции — предпочтительны Kaniko/buildkit sidecar или отдельный build-нод. Логи и артефакты с секретами — маскирование в консоли и короткий TTL.


7. Параллельные стадии и матрица

Несколько stage внутри parallel { } ускоряют lint/test/integration. Для версий языка/ОС — matrix (declarative matrix axis или scripted); кэш агентов (tool + workspace) согласуйте с изоляцией.


8. Чек-лист

  • Обновления Jenkins LTS и плагинов по расписанию.
  • Job DSL / CasC (Configuration as Code) для воспроизводимости.
  • Разделение агентов по нагрузке и trust zone.
  • В options задавайте buildDiscarder, timeout и timestamps на типовых пайплайнах.
  • Уведомления в post { always/unstable } с ссылкой на build и commit.

Дальше: CI/CD: GitLab и GitHub Actions · тег Jenkins