Jenkins для QA: основные паттерны построения пайплайна
Jenkins — старичок CI с 2011 года. В новых проектах его обходят (выбирают GitHub Actions, GitLab CI, CircleCI), но в корпоративных и legacy-проектах он живее всех живых. Гайд для QA, который оказался в проекте с Jenkins.
Declarative pipeline (Jenkinsfile)
Современный Jenkins — это Jenkinsfile в репо, не «настроил кнопками через UI». UI используется только для запуска и просмотра.
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Install') {
steps {
sh 'npm ci'
}
}
stage('Test') {
steps {
sh 'npx playwright test'
}
}
}
post {
always {
publishHTML([reportDir: 'playwright-report', reportFiles: 'index.html', reportName: 'Playwright Report'])
}
}
}
Этот файл — в репо вместе с кодом. Изменения проходят через PR, ревью.
Шаблонные паттерны
Параллелизация по тэгам
stage('Tests') {
parallel {
stage('Smoke') { steps { sh 'pytest -m smoke' } }
stage('API') { steps { sh 'pytest -m api' } }
stage('UI') { steps { sh 'pytest -m ui' } }
}
}
Smoke, API и UI запускаются параллельно — общее время = max(3 стейджей), а не sum.
Матрица браузеров
stage('Browser tests') {
matrix {
axes {
axis {
name 'BROWSER'
values 'chromium', 'webkit', 'firefox'
}
}
stages {
stage('Test') {
steps {
sh "npx playwright test --project=${BROWSER}"
}
}
}
}
}
Один stage блок → 3 параллельных прогона на разных браузерах.
Conditional stages
Smoke на каждый PR, full regression только на main:
stage('Full Regression') {
when {
branch 'main'
}
steps {
sh 'pytest tests/regression/'
}
}
Allure-отчёты
post {
always {
allure([
includeProperties: false,
jdk: '',
properties: [],
reportBuildPolicy: 'ALWAYS',
results: [[path: 'allure-results']]
])
}
}
Нужен плагин Allure в Jenkins.
Подводные камни
⚠️ Pipeline syntax: declarative (рекомендуется) vs scripted — два разных синтаксиса. Не смешивай. Современный — declarative.
⚠️ Workspace persistence: Jenkins не чистит workspace между билдами по умолчанию. Старые файлы остаются. Используй cleanWs() в pre или post.
⚠️ Secrets: пароли и токены — через withCredentials, не через env-переменные напрямую. Иначе светятся в логах.
⚠️ Параллелизм агентов: если у тебя один agent и 5 параллельных pipeline — они выстроятся в очередь. Считай ресурсы.
Когда мигрировать с Jenkins
Если можешь — мигрируй. Современный CI (GitHub Actions, GitLab CI) проще, дешевле, надёжнее. Jenkins требует поддержки сервера, периодических обновлений плагинов, ручной настройки.
Сценарии когда нельзя:
- Self-hosted requirement (compliance).
- Сотни легаси-pipeline’ов.
- Команда не готова к миграции.
Минимальный набор для QA
✅ Jenkinsfile в репозитории проекта (не в UI).
✅ pre блок с cleanWs() — чистый старт каждого билда.
✅ Параллельные стейджи для smoke / API / UI / unit.
✅ post { always { publishHTML/allure } } — отчёты доступны после билда.
✅ when { branch 'main' } для длинного регресса.
✅ Slack notification на падение — post { failure { slackSend ... } }.
Подробнее: Jenkins Pipeline syntax, Pipeline best practices.