Jenkins
Дополнительные возможности
-
timestamp()
печатает время выполнения каждого шага -
buildDiscard
задает параметры хранения информации о сборке -
timeout
задает время ожидания для сборки, используется для того чтобы прервать сборку при зависании.
pipeline {
agent any
options {
timestamps()
buildDiscarder logRotator(daysToKeepStr: '3',
numToKeepStr: '3' )
/* All Project: pipeline
Timeout set to expire in 20 min */
timeout(time: 20, unit: 'MINUTES')
}
stages {
stage('Build') {
options {
/* Stage: Build
Timeout set to expire in 1 min 0 sec */
timeout(time: 1, unit: 'MINUTES')
}
steps {
echo "build ${env.BUILD_ID} on ${env.JENKINS_URL}"
/* Sleeping for 1 min 40 sec */
sleep 100
}
}
}
}
-
buildDiscarder
- сохранять артефакты и логи для определенного числа последних запусков конвейера -
checkoutToSubdirectory
- выполняет автоматическую проверку системы управления версиями в подкаталоге рабочей области -
disableConcurrentBuilds
- запретить одновременное выполнение конвейера -
disableResume
не позволяет конвейеру возобновить работу после перезапуска контроллера. -
newContainerPerStage
- Используется с агентом верхнего уровня docker или dockerfile. Если указано, каждый этап будет запускаться в новом экземпляре контейнера на том же узле, а не все этапы, выполняемые в одном экземпляре контейнера. -
overrideIndexTriggers
- Позволяет переопределить стандартную обработку триггеров индексации ветвей. -
quietPeriod
- Установите период молчания в секундах для конвейера, переопределив глобальное значение по умолчанию. -
retry
В случае сбоя повторите попытку запуска всего конвейера указанное количество раз. -
skipDefaultCheckout
По умолчанию в директиве агента пропускать извлечение кода из системы управления версиями. -
skipStagesAfterUnstable
Пропускайте этапы после того, как состояние сборки изменилось на НЕСТАБИЛЬНЫЙ -
timeout
установите период ожидания для запуска конвейера, по истечении которого Дженкинс должен прервать конвейер. -
timestamps
Добавьте ко всему выводу на консоль, время для действий. -
buildDiscarder
options { buildDiscarder(logRotator(numToKeepStr: '1')) }
- checkoutToSubdirectory
options { checkoutToSubdirectory('foo') }
- disableConcurrentBuilds
options { disableConcurrentBuilds() }
- disableResume
options { disableResume() }
- overrideIndexTriggers
options { overrideIndexTriggers(true) }
- preserveStashes
options { preserveStashes(buildCount: 5) }
- quietPeriod
options { quietPeriod(30) }
- retry
options { retry(2) }
- skipDefaultCheckout
options { skipDefaultCheckout() }
- skipStagesAfterUnstable
options { skipStagesAfterUnstable() }
- timeout
options { timeout(time: 1, unit: 'HOURS') }
- timestamps
options { timestamps() }
- parallelsAlwaysFailFast
options { parallelsAlwaysFailFast() }
Заметки
shell output
script {
GIT_COMMIT_EMAIL = sh (
script: 'git --no-pager show -s --format=\'%ae\'',
returnStdout: true
).trim()
echo "Git committer email: ${GIT_COMMIT_EMAIL}"
}
Параметризованный конвейер
Типы параметров:
-
string
Этот параметр позволяет вводить строку. Подпараметры включают в себя description , defaultValue и name. -
text
Этот параметр позволяет пользователю вводить несколько строк текста. -
booleanParam
параметр значения его true/false -
choice
Этот параметр позволяет пользователю выбирать из списка вариантов. Под параметрами для него являются имя, choices и описание. Здесь choices относится к списку вариантовПервый в списке будет выбран по умолчанию. -
password
Этот параметр позволяет пользователю вводить пароль. Для паролей введенный текст скрыт.
Пример:
-
string
parameters { string(name: 'YOURNAME', defaultValue: 'Valera', description: '') }
-
text
parameters { text(name: 'TEXT', defaultValue: 'One\n2\nThree\n', description: '') }
-
booleanParam
parameters { booleanParam(name: 'Test', defaultValue: true, description: '') }
-
choice
parameters { choice(name: 'CHOICES', choices: ['one', '2', 'three'], description: '') }
-
password
parameters { password(name: 'PASSWORD', defaultValue: 'SECRET', description: '') }
pipeline {
agent any
parameters {
string(name: 'FIRST_NAME', defaultValue: 'Ivan',
description: 'This is your name')
string(name: 'LAST_NAME', defaultValue: 'Ivanov',
description: '')
text(name: 'MESSAGE', defaultValue: '',
description: 'Enter some information about the news')
booleanParam(name: 'DO_IT', defaultValue: true,
description: '.....')
choice(name: 'CHOICE', choices: ['one', '2', 'Three'],
description: 'Pick something')
password(name: 'PASSWORD', defaultValue: 'SECRET',
description: 'Enter a password')
}
stages {
stage('Example') {
steps {
echo "Hello ${params.FIRST_NAME}"
echo "Biography: ${params.LAST_NAME}"
echo "Toggle: ${params.DO_IT}"
echo "Choice: ${params.CHOICE}"
echo "Password: ${params.PASSWORD}"
}
}
}
}
Синтаксис
Agent
- указывает, где запускается весь конвейер или конкретный этап. Agent в верхней части блока pipeline должен быть определен обязательно для выполнения. Отдельные директивы agent может быть указана по необходимости в начале отдельных этапов, чтобы указать, где в этих этапах должен выполняться код.
Параметры для agent:
-
any
- Выполните конвейер или этап для любого доступного агента. none - При применении на верхнем уровне блока конвейера глобальный агент не будет выделен для всего выполнения конвейера, и каждый раздел Stage должен содержать свой собственный раздел агента. -
label
- Выполните конвейер или этап для агента, доступного в среде Jenkins, с предоставленной меткой. -
node
- идентичен label, но у node можно указать дополнительный параметр customWorspace. -
docker
- выполнить конвейер или этап с заданным контейнером, который будет динамически подготовлен на узле, предварительно настроенном для приема конвейеров на основе Docker -
dockerfile
- выполнить конвейер или этап с контейнером, созданным из файла Docker, содержащегося в исходном репозитории. -
kubernetes
- выполнить конвейер или этап внутри модуля, развернутого в кластере Kubernetes. Пример 1: Раздел агента внутри части блока pipeline
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Hello Pipeline'
ws('/tmp/hey') {
sh 'pwd'
}
}
}
}
}
Пример 2: Раздел агента внутри stage
pipeline {
agent none
stages {
stage('Build') {
agent any
steps {
echo 'Helo Pipeline'
}
}
stage('Test') {
agent any
steps {
echo 'Test'
}
}
}
}
Environment
**Environment**
- определяет последовательность пар ключ-значение, которые будут определены как переменные среды для всех шагов или этапов
Обратите внимание что credentials
: tomcat9Cred (Login/Password) должен быть у вас создан в Jenkins что бы вы могли к нему обратиться.
pipeline {
agent any
environment {
javaVersion = '/usr/var/java8'
}
stages {
stage('Example Username/Password') {
environment {
SERVICE_CREDS = credentials('tomcat9Cred')
}
steps {
/* Masking supported pattern matches
of $SERVICE_CREDS
or $SERVICE_CREDS_USR
or $SERVICE_CREDS_PSW */
echo "Service user is $SERVICE_CREDS_USR"
sh 'echo "Service password is $SERVICE_CREDS_PSW"'
}
}
stage('Build') {
steps {
echo "build ${env.BUILD_ID} on ${env.JENKINS_URL}"
echo "This is path ${env.javaVersion}"
echo "This is path $javaVersion"
sh 'printenv'
}
}
}
}
Post
Post - определяет один или несколько дополнительных шагов, которые выполняются после завершения конвейера или этапа
список условий для post:
-
always
- выполняется nезависимо от статуса завершения конвейера или этапа. -
aborted
- выполняется если конвейер был прерван. -
changed
- если статус текущей сборки отличается от статуса предыдущей, выполняются шаги в блоке. -
cleanup
- выполнить шаги после всех остальных условий, независимо от всех состояний. -
fixed
- выполняется в случае если текущий конвейер или этап был успешным, а прошлый был fail или unstable -
failure
- если текущая сборка провалилась, выполнить шаги в блоке. -
success
- текущая сборка прошла успешно, выполняются шаги в блоке. -
unstable
- выполнить шаги в сборке если состояние было нестабильным. -
unsuccessful
- выполняется в случае не успеха. -
regression
- выполнятся если текущее с fail или unstable статусе, а предыдущей был успешны
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'ls -ls'
}
}
}
post {
always {
echo 'always finished'
deleteDir() /* clean up our workspace */
}
aborted {
echo 'Project aborted...'
}
changed {
echo 'Things were different before...'
}
success {
echo 'I succeeded'
}
unstable {
echo 'I am unstable...'
}
failure {
echo 'I failed :/'
}
}
}
Stages
Stages - раздел этапов содержит последовательность из одной или нескольких этапов, тут исполняются основные действия в конвейере.
Stage
- входит в stages, и содержит steps
Steps
- определяет шаги которые должны быть выполнены для stage. В разделе steps у нас может быть любой допустимый оператор DSL, такой как git , sh , echo и т. д.
pipeline {
agent any
stages {
stage('Test') {
steps {
echo 'testing...'
}
}
stage('Build') {
steps {
echo 'build building'
sh 'ls -l'
}
}
stage('Deploy') {
steps {
echo 'deploy to container'
}
}
}
}