我有具有动态并行阶段的流水线,我希望我的流水线在任何阶段失败的情况下都能快速失败。我尝试添加failFast: true,但我的管道卡在“在阶段ABC失败”。
stage("Deploy") {
steps {
script {
def stages = createStages("Name", "Project")
fastFail: true
for (stage in stages) {
parallel stage
}
}
}
}
发布于 2019-11-27 19:23:59
解决方案:在Jenkins管道上使用failFast
标志。
来自 的
您可以强制并行阶段在其中一个失败时中止所有阶段,方法是将
failFast
true添加到包含该并行的阶段。
请注意,如果代理节点在每个作业中启动,所有作业都将被触发并退出(如果其中一个失败)(如果流水线中的作业'a‘失败,但作业'b’仍在寻找节点且尚未启动,则它将继续-这是边缘情况)。注意,如果代理节点在每个作业中启动,所有作业将被触发并退出(如果其中一个失败)(如果管道中的作业‘a’失败,但作业‘b’仍在寻找节点且尚未启动,则它将继续-这是边缘情况)。
Examples - options包括:
选项管道中的1.Use parallelsAlwaysFailFast方法:
pipeline {
agent any
options {
parallelsAlwaysFailFast()
}
stages {
stage('Non-Parallel Stage') {
steps {
echo 'This stage will be executed first.'
}
}
stage('Parallel Stage') {
when {
branch 'master'
}
parallel {
stage('Branch A') {
agent {
label "for-branch-a"
}
steps {
echo "On Branch A"
}
}
stage('Branch B') {
agent {
label "for-branch-b"
}
steps {
echo "On Branch B"
}
}
stage('Branch C') {
agent {
label "for-branch-c"
}
stages {
stage('Nested 1') {
steps {
echo "In stage Nested 1 within Branch C"
}
}
stage('Nested 2') {
steps {
echo "In stage Nested 2 within Branch C"
}
}
}
}
}
}
}
2.在并行使用failFast true
之前使用
stage('Parallel Stage') {
when {
branch 'master'
}
failFast true
parallel {
3.在map中配置作业,并在打开failFast属性的情况下执行。
jobsList = [
{job: 'jobA', parameters: [booleanParam(name: 'flag', value: true)]},
{job: 'jobB', parameters: [booleanParam(name: 'flag', value: true)]}
]
jobsList.failFast = true
parallel(jobsList)
发布于 2020-06-11 06:02:36
我无法回复@avivamg提供的答案,但我无法直接使用他/她的解决方案。这对我很有效:
stages.failFast = true
parallel stages
或者在你的例子中:
stage("Deploy") {
steps {
script {
def stages = createStages("Name", "Project")
stages.fastFail = true
// I'm not sure if the for loop will work as failFast is on the map
// so if that doesn't work then you could use this instead:
// parallel stages
for (stage in stages) {
parallel stage
}
}
}
}
发布于 2021-10-20 15:33:31
如果您正在使用脚本管道,那么您需要将failFast添加到并行步骤中,如下所示-
stage('SomeStage') {
parallel (
"Process1" : { //do something },
"Process2" : { //do something else },
failFast: true
)
}
https://stackoverflow.com/questions/58026189
复制相似问题