Jenkins 条件阶段变更集始终被跳过

Har*_*old 11 jenkins

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

我最终尝试的代码是:

when {
    changeset '*.yaml'
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

lvt*_*llo 2

Jenkins 必须首先收集变更日志,例如 checkout scm。\n当您刚刚checkout scm在 jenkins 管道中运行时,它会告诉您:\n错误:\xe2\x80\x98checkout scm\xe2\x80\x99 仅在使用 \xe2\x80 时可用来自 SCM\xe2\x80\x9d 的 \x9cMultibranch Pipeline\xe2\x80\x9d 或 \xe2\x80\x9cPipeline 脚本。

\n\n

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

\n\n
pipeline{\n    agent any\n\n    stages{\n        stage(\'checkout\'){\n            steps{\n                git branch: \'master\', url: \'https://github.com/xxx/xxx.git\'\n            }\n        }\n\n        stage(\'test\'){\n            when {\n                changeset "*.yaml"\n            }\n            steps{\n                echo "The file did change in the last commit (SCM checking)"\n            }\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
[Pipeline] { (test)\n[Pipeline] echo\nThe file did change in the last commit (SCM checking)\n[Pipeline] }\n[Pipeline] // stage\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果没有变化的话:

\n\n
[Pipeline] { (test)\nStage "test" skipped due to when conditional\n[Pipeline] }\n
Run Code Online (Sandbox Code Playgroud)\n