Jenkins 管道:检测阶段是否以 "Restart from stage" 图标开始
Jenkins pipeline: detect if a stage is started with the "Restart from stage" icon
假设我有一个声明性管道。我只想在 'Restart from stage' 图标被使用时 运行 一个舞台?
有没有办法做到这一点(一个方法,一个变量...)?我想 运行 仅当使用“从舞台重新启动”时
stage('Test') {
when {
expression {
// An expression to detect if Restart from this stage is used
}
}
steps {
sh 'echo 1'
}
}
您可以定义一个全局变量,该变量将保存一个布尔值,表示管道是从开始执行还是从特定阶段执行,在第一阶段更新它并稍后在 when
中使用它确定是否发生 从阶段 重新启动的条件。
类似于:
RESTART = true
pipeline {
agent any
stages {
stage('Setup') {
steps {
script{
// signaling pipeline was executed from the beginning (first stage)
RESTART = false
}
// other setup steps
}
}
stage('Test') {
when {
expression { return RESTART }
}
steps {
sh 'echo 1'
}
}
}
}
基于@Pamela 对使用 cause
条件的回答的另一个不错的选择是在 when directive 中使用内置的 triggeredBy
选项,从而避免使用 getBuildCauses()
并且需要过滤所有原因,并立即获取条件。
类似于:
stage('Test') {
when { triggeredBy 'RestartDeclarativePipelineCause' }
steps {
sh 'echo 1'
}
}
您可以使用currentBuild.getBuildCauses()
:https://www.jenkins.io/doc/pipeline/examples/#get-build-cause
然后,在您的测试阶段添加when
表达式检查构建的原因是否与您需要的相匹配。
stage('Test') {
when {
expression {
return currentBuild.getBuildCauses().any { cause ->
cause._class == 'org.jenkinsci.plugins.pipeline.modeldefinition.causes.RestartDeclarativePipelineCause'
}
}
}
steps {
sh 'echo 1'
}
}
假设我有一个声明性管道。我只想在 'Restart from stage' 图标被使用时 运行 一个舞台?
有没有办法做到这一点(一个方法,一个变量...)?我想 运行 仅当使用“从舞台重新启动”时
stage('Test') {
when {
expression {
// An expression to detect if Restart from this stage is used
}
}
steps {
sh 'echo 1'
}
}
您可以定义一个全局变量,该变量将保存一个布尔值,表示管道是从开始执行还是从特定阶段执行,在第一阶段更新它并稍后在 when
中使用它确定是否发生 从阶段 重新启动的条件。
类似于:
RESTART = true
pipeline {
agent any
stages {
stage('Setup') {
steps {
script{
// signaling pipeline was executed from the beginning (first stage)
RESTART = false
}
// other setup steps
}
}
stage('Test') {
when {
expression { return RESTART }
}
steps {
sh 'echo 1'
}
}
}
}
基于@Pamela 对使用 cause
条件的回答的另一个不错的选择是在 when directive 中使用内置的 triggeredBy
选项,从而避免使用 getBuildCauses()
并且需要过滤所有原因,并立即获取条件。
类似于:
stage('Test') {
when { triggeredBy 'RestartDeclarativePipelineCause' }
steps {
sh 'echo 1'
}
}
您可以使用currentBuild.getBuildCauses()
:https://www.jenkins.io/doc/pipeline/examples/#get-build-cause
然后,在您的测试阶段添加when
表达式检查构建的原因是否与您需要的相匹配。
stage('Test') {
when {
expression {
return currentBuild.getBuildCauses().any { cause ->
cause._class == 'org.jenkinsci.plugins.pipeline.modeldefinition.causes.RestartDeclarativePipelineCause'
}
}
}
steps {
sh 'echo 1'
}
}