jenkins - 如何添加从 jenkins 管道中的某个阶段开始的能力?

标签 jenkins groovy automation jenkins-pipeline pipeline

在下面的示例中,我希望能够从参数中选择在任何阶段启 Action 业。 'when' 条件确实有帮助,但我不知道如何让它从 stage2 开始,然后完成它之后的所有阶段。目前如下所示,它只会执行为 START_AT 参数选择的阶段并跳过所有其他阶段。

pipeline {
    agent any
    parameters {
        choice(name: 'START_FROM', choices: ['stage1', 'stage2', 'stage3'], description: 'Choose which step to start the job on.')
    }
    stages {
        stage('stage1') {
            when {
                expression { params.START_FROM == 'stage1' }
            }
            steps {
                echo "stage1 executing"
            }
        }

        stage('stage2') {
            when {
                expression { params.START_FROM == 'stage2' }
            }
            steps {
                echo "stage1 executing"
            }
        }

        stage('stage3') {
            when {
                expression { params.START_FROM == 'stage3' }
            }
            steps {
                echo "stage1 executing"
            }
        }
    }
}

最佳答案

您可能需要巧妙地处理 when{},这很痛苦。 首先有一个“开始哪个阶段”的参数将是指示管道将从哪里开始的第一种方法。对于这个例子,我们称它为 stageStart

然后你可以有另一个标志,指示是否可以“继续”。我们称它为 continueStages

对于您的每个阶段,在您的 when{} 中,您可以像这样格式化它:

when {expression {return "${stageStart}" == "stage2" || "${continueStages}" == "true"}}

那么这里的逻辑就是将 continueStage 设置为 false。当您进入一个阶段时,将该变量设置为 true。除非 stageStart 与阶段名称匹配,否则不会进入第一阶段。然后将进入之后的每个阶段。它看起来像这样:

continueStages = "false"
pipeline {
agent any
parameters {
    choice(name: 'START_FROM', choices: ['stage1', 'stage2', 'stage3'], description: 'Choose which step to start the job on.')
}
stages {
    stage('stage1') {
        when {
            expression { return {"${stageStart}" == "stage1"} }
        }
        steps {
            continueStages = "true"
            echo "stage1 executing"
        }
    }

    stage('stage2') {
        when {
            expression { return {"${stageStart}" == "stage2" || "${continueStages}" == "true"}}
        }
        steps {
            continueStages = "true"
            echo "stage1 executing"
        }
    }

    stage('stage3') {
        when {
            expression { return {"${stageStart}" == "stage3" || "${continueStages}" == "true"} }
        }
        steps {
            continueStages = "true"
            echo "stage1 executing"
        }
    }
}


}

附录,我想将其设置为您可以在构建时在 Jenkins 中设置的参数。如果您以不同的方式实现它,这个逻辑仍然有效,您只需更改语法(比如不要使用 return{})

关于jenkins - 如何添加从 jenkins 管道中的某个阶段开始的能力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69573646/

相关文章:

testing - 我们如何使用 browserstack 和 Geb Framework 在多个浏览器上执行单个测试

internet-explorer - 使用 AutoIT 屏蔽 IE 中的导航声音?

automation - 是否可以让 gitlab CI 触发另一个管道?

jenkins - 如何在 Jenkins Groovy Post Build 插件中重用 groovy 脚本?

git - 启动后将文件发送到容器实例 (Docker)

jenkins - 使用 CopyArtifact 从特定版本复制

grails - Grails命令对象和输入名称值

hudson - 构建状态 Jenkins

sql - 如何从Grails中的SQL查询获取字符串值?

hadoop - 我们可以在 move 文件时在Oozie Fs Action 中应用Pathfilter吗