我们有一个大型的 monorepo,里面有多个项目(A 和 B)。我目前将 Jenkins 设置为一个 Multibranch Pipelines 项目,该项目监视 PR 的 monorepo。如果创建了 PR,Jenkins 会同时构建 A 和 B。
现在,我希望 Jenkins 更聪明,并且只在 PR 中的任何更改引入A/目录更改时才构建项目 A。事实证明这是非常困难的。
when { changeset "A/" }似乎只检查最后提交的修改的文件A/,而不是如果PR在修改的文件A/。
所以我使用https://issues.jenkins-ci.org/browse/JENKINS-54285让它变得更聪明,并做了:
when { expression { return sourceChanged("A/") } }
以sourceChanged定义为:
def boolean sourceChanged(String module) {
if (env.CHANGE_TARGET == null)
return true;
def MASTER = sh(returnStdout: true, script: "git rev-parse origin/${env.CHANGE_TARGET}").trim()
def HEAD = sh(returnStdout: true, script: "git …Run Code Online (Sandbox Code Playgroud)