2025年3. jenkins实现job依赖编排

3. jenkins实现job依赖编排当多个 job 之间存在依赖情况 如何通过一次触发构建来拉起后续整条链路的构建任务 通过 maven 依赖来触发构建又不够灵活 要点分析 案例目标 依赖分多层 每层构建可以是并行执行 当前层若存在 job 失败则不拉起后续 job job 执行需要提供参数 前面的 job 需要给后续 job 传递参数 如目标代码的 tag 等

大家好,我是讯享网,很高兴认识大家。

当多个job之间存在依赖情况,如何通过一次触发构建来拉起后续整条链路的构建任务?通过maven依赖来触发构建又不够灵活

要点分析

  • 案例目标在这里插入图片描述
    讯享网
  • 依赖分多层,每层构建可以是并行执行
  • 当前层若存在job失败则不拉起后续job
  • job执行需要提供参数,前面的job需要给后续job传递参数,如目标代码的tag等
  • 父job能否获取到子job的信息,如子job的参数

方案

1. 使用插件
Freestyle project -> Post-build Action在这里插入图片描述插件:

  • Join plugin
  • Parameterized Trigger plugin
    该插件可以传递参数给子job

尝试插件不能满足上述要点要求,最终没有使用插件实现

2. pipeline实现job编排
这是本次实现本次案例使用的方案,具体实现见下文

pipeline实现job编排

尝试实现上述ple1->ple2的过程

相关pipeline功能语法
  • build job
    build job: 'job-1-1', parameters: [string(name: 'hzw_version', value: env.hzw_version)]
    build job: 'ple2', parameters: [string(name: 'hzw_version', value: env.hzw_version)], propagate: false, wait: false

使用parameters调用子job时传递的参数,可以传递多个,前提是子job是参数化构建并且配置了同名参数项,这样子job才能获取这里传递的参数

  • UI界面通过This project is parameterized设置参数
  • pipeline脚本中通过parameters设置参数
  • parallel并行
options { parallelsAlwaysFailFast() // 字面意思^o^ } ... failFast true // 当前parallel快速失败 parallel { stage('并行1') { // do something } stage('并行2') { // do something } } 

讯享网
实现

ple1
在这里插入图片描述
入口输入参数,此参数可通过githook等方式获取,这里不展开了,暂手动输入算了

讯享网pipeline{ agent any //parameters { // // 等价于UI界面配置:This project is parameterized,但每次执行会再次初始化job中的param // string(name: 'hzw_version', defaultValue: 'hhhzzzwww-ple1_v0.1', trim: true, description: '描述一下这个参数') //} stages{ stage('build-childs-1'){ failFast true parallel { stage("child 1"){ steps{ build job: 'job-1-1', parameters: [string(name: 'hzw_version', value: env.hzw_version)] } } stage("child 2"){ steps{ build job: 'job-1-2', parameters: [string(name: 'hzw_version', value: env.hzw_version)] } } } } stage('build-childs-2'){ steps{ build job: 'job-1-3', parameters: [string(name: 'hzw_version', value: env.hzw_version)] } } //====上文job完成,则执行下一级==== stage("next_level"){ steps{ build job: 'ple2', parameters: [string(name: 'hzw_version', value: env.hzw_version)], propagate: false, wait: false } } } post { failure { script { echo "${currentBuild.projectName}构建失败!!" } } success { script { echo "${currentBuild.projectName}构建成功!!" } } } } 

job-1-1

  • 设置参数,以接收父job传递的参数
    在这里插入图片描述
  • pipeline脚本
pipeline{ agent any environment { // 自定义配置 hzw_job1_1='job1-1' } stages{ stage('testsomething'){ steps{ script{ echo "====================" sh("env|grep hzw") echo "====================" // error "这里指定一个错误" // 子job产生错误,测试是否传递到父job } } } } } 

ple2

  • 设置参数,以接收父job传递的参数
    在这里插入图片描述
讯享网pipeline{ agent any options{ parallelsAlwaysFailFast() } stages{ stage('build-child'){ parallel { stage("child 1"){ steps{ build job: 'job-2', parameters: [string(name: 'hzw_version', value: env.hzw_version)] } } } } stage("next_level"){ steps{ build job: 'ple3', parameters: [string(name: 'hzw_version', value: env.hzw_version)], propagate: false, wait: false } } } } 

效果展示

  • 成功
    在这里插入图片描述
  • 子job失败
    在这里插入图片描述

尾巴

本文实现了不同层级job依次执行,但前提要将所有level型job都创建出来,每个level需要在脚本中写死构建哪些job,若只想执行某些job,这样是不是不太灵活??

小讯
上一篇 2025-04-06 12:48
下一篇 2025-02-21 16:07

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/29669.html