詹金斯有条件的阶段变更总会跳过

时间:2018-09-27 10:42:06

标签: jenkins

我正在尝试为Jenkins阶段添加条件,以便仅在变更集中的.yaml文件发生更改时才会触发

我最终尝试使用的代码是:

when {
    changeset '*.yaml'
}

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

有人知道我要去哪里了吗,或者我还能尝试什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

Jenkins必须首先收集变更日志,例如结帐scm。 当您仅在詹金斯管道中运行checkout scm时,它将告诉您: 错误:“ 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] }