【发布时间】:2018-09-24 03:50:50
【问题描述】:
场景:
TFS2017 团队项目
150-200 个 Git 存储库
每个存储库有 10-30 个分支
我们希望将 Jenkins 整合到我们的工作流程中,以帮助进行 TFS 构建以及外部部署和测试。我们需要一个 Jenkins 作业来触发 Git 代码推送,这很简单。需要将签入信息传递到作业中,不管它是参数形式还是 HTTP POST 有效负载之类的形式,其中包括分支名称、存储库名称/url 等基本信息。因为我们为所有存储库和分支使用 1 个 Jenkins 脚本化管道,我们不想将 1 个 Jenkinsfile 签入 300 多个分支,当我们需要对管道执行更改时,这需要更新每个分支。
我们的尝试:
TFS Jenkins 服务挂钩到 Jenkins 管道项目:不传入动态参数(分支/存储库名称),并且无法将有效负载检索到管道脚本中。
TFS Jenkins 服务挂钩到 Jenkins Multibranch 项目(借助“Pipeline: Multibranch with default”插件):在 TFS 服务挂钩中,当使用“触发通用构建”时,我们必须指定 Multibranch/repobranch 作业每个服务挂钩单独命名,或者如果使用“触发 Git 构建”选项,它会同时触发所有多分支分支的构建。
TFS Jenkins 服务挂钩到 Jenkins 多配置项目:无法指定由 Jenkins 项目运行的 Jenkinsfile。
任何 Jenkins 项目的 TFS 通用 Web Hook:Crumbs 错误排除了这种可能性。
如果我们在上述尝试中遗漏了什么或完全不同的方法,请告诉我。
【问题讨论】:
-
出于好奇,为什么使用 Jenkins 而不是开箱即用的构建/发布功能?
-
考虑过 TFS Build 来调用一个简单的 powershell 来调用 Jenkins 构建?在调用 Jenkins 时,为您提供对变量的最大可用性和对数据形状的完全控制。
-
还想知道 Jenkins 通过 TFS Buikd 为您提供了什么,尽管我怀疑它是 Jenkinsfile,将配置作为代码构建。考虑升级到 TFS 2018 以获得 TFS 中的 YAML 支持。
-
对于这么大的项目,我会选择 Job DSL 插件。我在这方面取得了很大的成功,并且使维护变得非常容易。你可以做一些事情,比如从 git repo 下载所有分支并为每个分支创建一个工作。
-
我个人很喜欢使用内置的 TFS 构建,它足够简单地触发代码推送,并且可以在成功构建完成后执行 Jenkins 构建,但是唉(违背我的意愿)这不是一个选项独立的原因。
标签: git jenkins groovy tfs triggers