我目前正在测试Jenkins 2.0的管道方法,以查看它是否适用于我正在使用的构建环境。
首先是环境本身。当前它由多个SCM存储库组成。每个存储库都包含多个分支,用于开发的不同阶段,并且每个分支都使用多种配置构建。并非所有配置都适用于每个存储库。
当前,每个存储库/分支都被设置为适用于不同配置的矩阵项目。每个项目将其构建结果作为工件公开,并且这些工件在下游项目中使用。
不同的存储库彼此依赖,因此在上游作业上成功构建会触发一些特定的下游作业。目前,所有这些都可以正常工作,但是设置新分支或调整构建过程所需的工作量很多,因为需要手动更改许多不同的项目。
现在,我想尝试一下新的管道。我的想法是创建多分支管道项目,并Jenkinsfile在包含构建说明的存储库内部放置一个。
Jenkinsfile
主要问题是使内部版本相互触发,因为基本上在特定上游分支中的内部版本需要触发下游分支。上游项目并不知道需要触发哪些下游分支的信息。每个下游项目都从一些上游分支获取工件,而理想的解决方案是,如果作为工件的来源的上游构建完成了构建,则将触发下游构建。
问题是只有下游项目才真正知道它们需要什么工件。在大多数情况下,分支名称不太可能匹配,这使得从上游项目触发构建非常困难。
目前,这是使用解决的ReverseBuildTrigger。但是,只要它到达管道附近,它就会停止工作。
ReverseBuildTrigger
我真的很茫然如何使它工作。有什么办法可以像ReverseBuildTrigger在管道脚本中工作一样吗?
如果更改单个上游分支,也不触发所有分支的整个下游构建。这将创建太多相等的构建。
我目前正在尝试使其适用于我们的部署。我最接近的是将以下内容添加到下游Jenkinsfile中;
properties([ pipelineTriggers([ triggers: [ [ $class: 'jenkins.triggers.ReverseBuildTrigger', upstreamProjects: "some_project", threshold: hudson.model.Result.SUCCESS ] ] ]), ])
至少让Jenkins承认构建“ some_project”时应该触发它,即它出现在“ View Configuration”页面中。
但是,到目前为止,“ some_project”的构建仍未按预期触发下游项目。
话虽这么说,也许您会有更多的运气。请让我知道这对你有没有用。