首页 > 解决方案 > Jenkins 条件阶段变更集总是被跳过

问题描述

我正在尝试向 Jenkins 阶段添加条件,因此它只会.yaml在变更集中的文件发生更改时触发

我最终尝试的代码是:

when {
    changeset '*.yaml'
}

根据以下站点,当*.yaml变更集中的文件发生更改时,这应该会导致该阶段运行,但是始终会跳过此阶段

有谁知道我哪里出错了,或者我还能尝试什么?

谢谢!

标签: jenkins

解决方案


Jenkins 必须首先收集变更日志,例如 checkout scm。当您只是checkout scm在 jenkins 管道中运行时,它会告诉您:错误:'checkout scm' 仅在使用“多分支管道”或“来自 SCM 的管道脚本”时可用。

因此,将 Jenkinsfile 中的管道添加到您的存储库。我的存储库包含一个文件test.yaml和一个Jenkinsfile带有此管道的文件:

pipeline{
    agent any

    stages{
        stage('checkout'){
            steps{
                git branch: 'master', url: 'https://github.com/xxx/xxx.git'
            }
        }

        stage('test'){
            when {
                changeset "*.yaml"
            }
            steps{
                echo "The file did change in the last commit (SCM checking)"
            }
        }
    }
}

现在它将起作用。当您的文件中的 Git 发生更改时,您将看到:

[Pipeline] { (test)
[Pipeline] echo
The file did change in the last commit (SCM checking)
[Pipeline] }
[Pipeline] // stage

否则,如果没有变化:

[Pipeline] { (test)
Stage "test" skipped due to when conditional
[Pipeline] }

推荐阅读