设为首页 收藏本站
查看: 1355|回复: 0

[经验分享] Jenkins 在声明式 pipeline 中并行执行任务

[复制链接]

尚未签到

发表于 2018-1-6 19:11:59 | 显示全部楼层 |阅读模式
  在持续集成的过程中,并行的执行那些没有依赖关系的任务可以缩短整个执行过程。Jenkins 的 pipeline 功能支持我们用代码来配置持续集成的过程。本文将介绍在 Jenkins 中使用声明式 pipeline 语法完成任务的并行执行。

Stage 内的并行执行
  在声明式 pipeline 版本 1.2 之前,这是唯一的并行方式,我们看一下代码的写法:
  

stage('run-parallel') {  steps {
  parallel(
  a: {
echo "task 1"  },
  b: {
echo "task 2"  }
  )
  }
  
}
  

  在同一个 stage 内部,我们可以并行的执行多个 step。代码中的 step a 和 b 会在同一台 agent 上并行执行。但是我们可以看到,这种并行执行的方式具有很大的局限性。首先因为 agent 只能在 stage 上设置,所以这种方式不能在不同的 agent 上执行并行的任务。其次并行执行的粒度为 step 级别,执行点小任务还行,但这样的粒度对设计持续集成的流程来说明显过小。所以,我们急需的是 stage 级别的并行执行能力。

Stage 级别的并行执行
  在刚刚发布的声明式 pipeline 版本 1.2中,Jenkins 终于开始支持 stage 级别的并行执行:

  稍微有一点要求是你的 Jenkins 的版本要大于 2.7:

  下面的实例代码描述了如何执行 stage 级别的并行任务:
  

pipeline {  agent any
  stages {
  stage(
'Stage1') {  agent { label
"test1" }  steps {
  timestamps {
echo '这是第一个被执行的 stage.'  sleep 5
  }
  }
  }
  stage('并行执行的 Stage') {
  parallel {
  stage('Stage2.1') {
  agent { label "test2" }
  steps {
  timestamps {
  echo "在 agent test2 上执行的并行任务 1."
  sleep 5
  echo "在 agent test2 上执行的并行任务 1 结束."
  }
  }
  }
  stage('Stage2.2') {
  agent { label "test3" }
  steps {
  timestamps {
  echo "在 agent test3 上执行的并行任务 2."
  sleep 10
  echo "在 agent test3 上执行的并行任务 2 结束."
  }
  }
  }
  }
  }
  stage('Stage3') {
  agent { label "test1" }
  steps {
  timestamps {
  echo '这是最后一个被执行的 stage.'
  }
  }
  }
  }
  
}
  

  上面的代码描述的执行顺序是 Stage1, 并行执行的 Stage 和 Stage3。其中并行执行的 Stage 包含两个并行执行的子 Stage,分别是 Stage2.1 和 Stage2.2,并且这两个 Stage 被指定到了不同的 agent。为了能够在日志中显示步骤执行的时间,我们使用了 Timestamper 插件。所有在 timestamps {} 块中的命令都会在日志中显示执行时间。好了,现在执行上面的配置,然后查看执行日志:

  从日志中可看到,Stage.21 和 Stage2.2 中的任务在执行时间上是重叠的,并且运行它们的 agent 也不一样。

总结
  Stage 级别的并行任务处理是非常有用的功能,尤其是在我们设计持续集成的流程时。让一些可以并行的任务(比如不同平台上的自动测试)同时执行可以明显缩短整个过程耗费的时间,从而提升持续执行的效能。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432331-1-1.html 上篇帖子: Jenkins学习七:Jenkins的授权和访问控制 下篇帖子: 为 Jenkins 配置 .NET 持续集成环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表