【发布时间】:2020-02-26 21:16:06
【问题描述】:
我正在为我们的构建设置 Jenkins 管道作业。我们之前使用 Freestyle 作业来构建我们的每个存储库,并在打包和部署阶段使用各种额外的手动触发作业。
到目前为止,我们有以下管道设置:
- repo A/Jenkinsfile - 流水线 A - 构建、运行单元测试并生成 神器
- repo B/Jenkinsfile - 管道 B - 构建、运行单元测试和 产生工件
每当管道 A 或 B 完成时,我都想运行管道 C。
- 管道 C 应采用最新的 A 和 B 管道的工件,将它们打包为 docker 映像,运行集成测试,部署到暂存环境。
我应该将管道 C 的 Jenkinsfile 存储在哪里,因为它没有自己的源代码库?
对我来说,这在逻辑上是作为 A 和 B 下游的单独管道,所以假设它属于单独的 Jenkinsfile,但那将在源代码控制中去哪里。澄清一下,我希望将所有管道文件置于源代码控制之下。
或者,我是否应该尝试在其中一个父管道中定义整个管道(包括集成等),当构建部分从另一个管道触发时跳过它?将另一个作为简单的构建。例如
-
流水线A(全流水线)
- 构建
- 单元测试
- 神器
- (获取最新的B神器)
- 集成测试
- 部署到暂存
-
管道 B(使用完整管道的简单构建)
- 构建
- 单元测试
- 神器
- 触发管道 A,将所有内容都跳过到集成测试步骤(可能在那些查看构建触发器的阶段使用
when块?)
我可以找到有关构建或触发另一个管道的资源,如下所示:https://metamorphant.de/blog/posts/2019-03-11-jenkins-101-downstream-projects/ 但没有关于在 Jenkins Pipeline 中构建上述依赖项和管道的信息。
【问题讨论】:
-
管道 C 可以位于任何一个存储库中,您只需在作业 C 的配置中指向此 Jenkinsfile。
-
@DibakarAditya 这就是我要尝试的。我不是 100% 相信这是它的合乎逻辑的地方,但这似乎比创建一个新的 repo/project 只是为了存储单个 Pipeline C 文件更好。也许一旦我完成了一整套集成测试,我会将它们和 Pipeline C 文件放在一个 repo 中。
标签: jenkins build jenkins-pipeline artifact jenkins-declarative-pipeline