笔者在《Jenkins 在声明式 pipeline 中并行执行任务》一文中介绍了如何在声明式 pipeline 中执行并行的任务。前一段时间,Jenkins 发布了 1.3 版的声明式 pipeline(declarative pipeline),这个版本继续增强了并行执行任务的能力:并行执行的任务可以是个任务流。官方称这一功能为 "sequential stages",本文将解释 "sequential stages",并通过 demo 演示其用法。

之前的任务并行方式

就是笔者在《Jenkins 在声明式 pipeline 中并行执行任务》一文中介绍的方式,我们在一个 stage 中设置多个子 stage 并行执行:

stages {
stage('Stage1') {
...
}
stage('并行执行的 Stage') {
parallel {
stage('Stage2.1') {
agent { label "test1" }
steps {
echo "在 agent test1 上执行的并行任务 1."
}
}
stage('Stage2.2') {
agent { label "test2" }
steps {
echo "在 agent test2 上执行的并行任务 2."
}
}
}
}
stage('Stage3') {
...
}
}

上面代码中任务的执行过程如下图所示:

任务 2.1 和任务 2.2 并行执行。

并行执行任务流

过去并行执行的任务都是单个的,但实际情况中我们还需要任务流级别的并行能力,如下图所示:

上图中显示有两条任务流在并行的执行,我们可以通过下面的代码来实现:

pipeline {
agent none stages {
stage('Stage1') {
agent { label "master" }
steps {
timestamps {
echo '这是第一个被执行的 stage.'
sleep
}
}
}
stage("build, deploy and test on Windows and Linux") {
parallel {
stage("windows") {
agent {
label "master"
}
stages {
stage("build") {
steps {
timestamps {
echo "build on windows."
}
}
}
stage("deploy") {
steps {
timestamps {
echo "deploy on windows."
}
}
}
stage("test") {
steps {
timestamps {
echo "test on windows."
sleep
}
}
}
}
} stage("linux") {
agent {
label "worker1"
}
stages {
stage("build") {
steps {
timestamps {
echo "build on linux."
}
}
}
stage("deploy") {
steps {
timestamps {
echo "deploy on linux."
}
}
}
stage("test") {
steps {
timestamps {
echo "test on linux."
sleep
}
}
}
}
}
}
}
stage('Stage3') {
agent { label "worker1" }
steps {
timestamps {
echo '这是最后一个被执行的 stage.'
}
}
}
}
}

为了显示任务的执行时间,笔者使用了 timestamper 插件。下图显示了笔者精简后的运行日志:

红框中的内容说明我们的两个任务流是完全并行执行的。这就是 1.3 版的声明式 pipeline 中增加的 "sequential stages" 功能。

总结

如今 jenkins 对声明式 pipeline 中并行任务的执行支持的非常给力(虽然经历了一个稍显漫长的过程)。笔者在 2017 年初调研时发现声明式 pipeline 无法支持并行的任务,后来开始支持比较初级的并行任务,笔者在《Jenkins 在声明式 pipeline 中并行执行任务》一文中进行了介绍。到今年(2018) 7 月份声明式 pipeline 发布了版本 1.3,这个版本中开始支持本文介绍的任务流级别的并行。至此笔者认为 jenkins 声明式 pipeline 中任务的并行执行功能已经比较完善了。

参考:
Sequential Stages (declarative pipeline 1.3 的新功能)

Jenkins pipeline 并行执行任务流的更多相关文章

  1. Jenkins pipeline:pipeline 使用之语法详解

    一.引言 Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature. 简单的来说,就是把Jenkins1.0版本中,Project中 ...

  2. Jenkins pipeline:pipeline 语法详解

    jenkins  pipeline 总体介绍 pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化. ...

  3. Jenkins pipeline概念理解

      1.Jenkins Pipeline总体介绍 Pipeline,简而言之,就是一台运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程 ...

  4. Jenkins pipeline 语法详解

    原文地址http://www.cnblogs.com/fengjian2016/p/8227532.html pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节 ...

  5. 转~Jenkins pipeline:pipeline 使用之语法详解

    一.引言 Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature. 简单的来说,就是把Jenkins1.0版本中,Project中 ...

  6. Jenkins Pipeline 持续集成

    Jenkins Pipeline 持续集成 Pipeline Script 执行流程 在使用Pipeline之前请确保Jenkins是2.x版本以上,并且安装了Pipeline插件. Jenkins提 ...

  7. 在容器中运行 Jenkins pipeline 任务

    持续集成中的 pipeline 技术和 docker 都是当前正在发展的主流方向,当然把它们结合起来在 CI/CD 过程中发挥出更强大的威力也是大家共同的目标.本文将介绍如何在 Jenkins pip ...

  8. 基于Jenkins Pipeline的ASP.NET Core持续集成实践

    最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署效率,因此这里总结一下. 一.关于持续集成与Jenkins Pipelin ...

  9. Jenkins pipeline job 根据参数动态获取触发事件的分支

    此文需要有Jenkins pipeline job 的简单使用经验 场景 我们日常的测试函数, 一般是不能仅仅在本地跑的,还需要一个公共的跑测试的环境,作为合并新的PR的依据. 如果用Jenkins ...

随机推荐

  1. leetcode 字谜

    242. Valid Anagram Easy 66298FavoriteShare Given two strings s and t , write a function to determine ...

  2. 再次认识void

    重新认识void 在初学c/c++时感觉void是一个很不起眼的关键字.因为在c++中我使用的还是比较少的.但是到了Linux中,不论是在内核源码中还是在程序编写的过程中有关void与*的组合随处可见 ...

  3. webpack简笔(1)

    1.npm init -> 生成package.json文件 2.npm install webpack --save-dev (不建议全局安装 ,会锁定版本) [ --save-dev 开发环 ...

  4. pg_dump 数据处理

    从数据库导出数据 -U 用户 -p 端口 -h 主机地址 -f 导出文件地址 -O 备份数据库结构和数据,不设置拥有者 -s  只导出数据库结构 最后是库名 (全部导出)pg_dump -U post ...

  5. MVC4 decimal 精度

    MVC默认为小数点 后2位 更改设置 在我们现在的MovieDBContext类中重载OnModelCreating方法,代码如下所示.public class MovieDBContext : Db ...

  6. 4.Redis客户端

    4.Redis客户端4.1 客户端通信协议4.2 Java客户端Jedis4.2.1 获取Jedis4.2.2 Jedis的基本使用方法4.2.3 Jedis连接池的使用方法4.2.4 Redis中P ...

  7. hbase-写操作

    hbase连接过程 hbase client在写入的数据的过程中,是直接和rs进行通信的,整个的数据写入流程并不涉及到HMaster.那么client是如何找到对应的rs呢?流程如下: client从 ...

  8. Mac/Linux/Centos终端中上传文件到Linux云服务器

      1.mac上传文件到Linux服务器  scp 文件名 用户名@服务器ip:目标路径 如:scp /Users/test/testFile test@www.linuxidc.com:/test/ ...

  9. hashmap源码研究

    概述 在官方文档中是这样描述HashMap的: Hash table based implementation of the Map interface. This implementation pr ...

  10. P2024 食物链

    题面:P2024 食物链 emmm其实不太难想 开三倍的数组 1~n:是当前动物的同类 n~2*n:是当前动物吃的动物 2*n~3*n:是吃当前动物的动物 emmmm #include<iost ...