Jenkins:一个高度分支的构建作业链
Jenkins: a heavily branched chain of build jobs
我们想在 Jenkins
生态系统的基础上建立持续集成和持续部署流程。目前我们正在尝试将我们拥有的所有 Jenkins
构建作业(从源代码到在测试服务器上启动的几个端点进程)放在一起。在我们的案例中,共有三种 build/deployment 进程:
- 从
C++
个项目构建 deb
个包(其中一些是 dependent,其他是 dependencies) ;
- 从
Docker
个容器构建镜像;
- 正在端点中启动一些进程;
正如您所注意到的,我们面临着由彼此触发的高度分支的工作链。并且任何上游项目的每次更新都必须遍历作业链并触发最终作业 (process I
)。所以最好使用某种 Jenkins
插件来:
- 控制如此复杂的作业结构(我尝试使用Build Pipeline Plugin,感觉这个工具适合"linear"作业链);
- 提供在作业环境之间传递参数的简洁方式。
嗯,对于传递参数,你应该使用 Parameterized Trigger Plugin.
对于更异步的参数传递,您可以使用 EnvInject plugin(它对各种事情都非常有用和灵活,考虑到您的复杂性,可能会证明不管你是否用它来传递参数都是有用的)
至于对照,研究Workflow plugin。它允许在自己的 Groovy 脚本中编写整个执行流程,并进行精细控制。更多链接:
官方 - https://jenkins-ci.org/content/workflow-plugin-10
教程 - https://github.com/jenkinsci/workflow-plugin/blob/c15589f/TUTORIAL.md#pausing-flyweight-vs-heavyweight-executors
正如@slav所说,Workflow插件应该能够处理这种复杂的控制流,包括子任务的并行处理,整个过程中变量的简单处理(只是Groovy局部变量) , 和 Docker support.
您当然可以将整个过程安排在一个 build.gradle
(或 Makefile
中)。如果您不介意 运行 同一个 Jenkins 从站上的所有步骤,并且不需要在构建过程中以任何特定方式与 Jenkins 交互或向 Jenkins 报告,那将是合适的。
我们想在 Jenkins
生态系统的基础上建立持续集成和持续部署流程。目前我们正在尝试将我们拥有的所有 Jenkins
构建作业(从源代码到在测试服务器上启动的几个端点进程)放在一起。在我们的案例中,共有三种 build/deployment 进程:
- 从
C++
个项目构建deb
个包(其中一些是 dependent,其他是 dependencies) ; - 从
Docker
个容器构建镜像; - 正在端点中启动一些进程;
正如您所注意到的,我们面临着由彼此触发的高度分支的工作链。并且任何上游项目的每次更新都必须遍历作业链并触发最终作业 (process I
)。所以最好使用某种 Jenkins
插件来:
- 控制如此复杂的作业结构(我尝试使用Build Pipeline Plugin,感觉这个工具适合"linear"作业链);
- 提供在作业环境之间传递参数的简洁方式。
嗯,对于传递参数,你应该使用 Parameterized Trigger Plugin.
对于更异步的参数传递,您可以使用 EnvInject plugin(它对各种事情都非常有用和灵活,考虑到您的复杂性,可能会证明不管你是否用它来传递参数都是有用的)
至于对照,研究Workflow plugin。它允许在自己的 Groovy 脚本中编写整个执行流程,并进行精细控制。更多链接:
官方 - https://jenkins-ci.org/content/workflow-plugin-10
教程 - https://github.com/jenkinsci/workflow-plugin/blob/c15589f/TUTORIAL.md#pausing-flyweight-vs-heavyweight-executors
正如@slav所说,Workflow插件应该能够处理这种复杂的控制流,包括子任务的并行处理,整个过程中变量的简单处理(只是Groovy局部变量) , 和 Docker support.
您当然可以将整个过程安排在一个 build.gradle
(或 Makefile
中)。如果您不介意 运行 同一个 Jenkins 从站上的所有步骤,并且不需要在构建过程中以任何特定方式与 Jenkins 交互或向 Jenkins 报告,那将是合适的。