Jenkins - 带有声明性Jenkinsfile的多个上游更改触发流水线

3
我正在尝试让Jenkins上游触发器与多个项目配合工作,从其他可用触发器来看,它得到了支持。当明确指定多个“项目/分支”时,它确实有效,但当我在代码中输入分支匹配时,它就无法工作。 有效代码 - 使用以下代码,构建会在proj1/dev或proj2/dev成功构建后触发。
triggers {
   upstream(
        ‘proj1/dev,proj2/dev’, thresholdhudson.model.Result.SUCCESS
)

不工作的代码 - 使用以下代码,虽然Jenkins没有语法错误,但构建并不会被触发。

triggers {
  upstream(
        upstreamProjects: ‘”proj1/“ + env.BRANCH_NAME.replaceAll("/", "%2F”),”proj2/“ + env.BRANCH_NAME.replaceAll("/", "%2F")',
 threshold: hudson.model.Result.SUCCESS
)

非常感谢您的帮助。

2个回答

4

你把整个内容都用单引号包围起来了。这意味着你设置的是单引号内的确切文本,而不是使用变量进行设置。而且你构建字符串的方式也不太对,逗号和引号的使用有误。正确的写法应该是:

triggers {
  upstream(
        upstreamProjects: 'proj1/' + env.BRANCH_NAME.replaceAll('/', '%2F') + ', proj2/' + env.BRANCH_NAME.replaceAll('/', '%2F'),
 threshold: hudson.model.Result.SUCCESS
)

我个人更喜欢使用单引号,如果你没有插入变量,就像我上面所做的那样。
另一个选项是使用带有插入变量的单个字符串。这种方式更易于阅读:
triggers {
  upstream(
        upstreamProjects: "proj1/${env.BRANCH_NAME.replaceAll('/', '%2F')},proj2/${env.BRANCH_NAME.replaceAll('/', '%2F')}",
 threshold: hudson.model.Result.SUCCESS
)

希望你的代码中没有使用智能引号,否则它们可能无法正常工作。希望这只是将代码复制到帖子中时出现的错误。

我尝试了你提供的两种语法格式,但不幸的是它们都无效。不过还是谢谢你的建议。是的,将代码复制粘贴到帖子中会添加一些额外的引号。 - tonywl
有可能触发器部分在 env 变量设置之前被求值。声明性 pipeline 中的某些内容在解析时被求值。尝试在 pipeline 之外设置一个变量(如 def myBranch = 'proj1/dev, proj2/dev'),并将其用作第一个引号字段的替代品。如果这样可以正常工作,那么问题很可能出在这里。 - Rob Hales
尝试将“def myBranch=xxx”放置在脚本块内和外,触发器块的前面和里面,但都出现了语法错误。 - tonywl
你正在使用声明式流水线吗?你必须将它放在流水线块外面。 - Rob Hales

0

我们知道是否可以将阻止选项添加到触发器中吗?如果上游作业已经在运行,并且有人或代码更改触发了当前作业,我希望作业等待。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接