案例简述

Pipeline as Code是2.0的精髓所在,是帮助Jenkins实现CI到CD转变的重要角色。

Pipeline,简单来说,是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

本案例受益于Jenkins内嵌的Groovy支持、丰富的Step库,自定义Pipeline脚本,实现了复杂的构建、发布流程。本案例将 one by one 教你部署 jenkins pipeline 2.0,还有心得介绍哦~


上线方案

1.环境准备

① 云CI入口

② Slave节点(安装了git,sbt,java)

③ 代码下载

2.操作

① 创建基础pipeline job

第一步:创建pipeline job,名称:pipeline_demo

第二步:配置Job

  •  配置丢弃旧的构建
  • 配置Build Triggers,选择Gerrit event
  •  配置Gerrit Reporting Values
  •  配置Trigger on,选择Patchset Created,选择comment Added Contains xxx
  •  配置Gerrit Project

jenkins多分支pipeline jenkins pipeline实例_jenkins多分支pipeline

第三步:编辑pipeline脚本,Pipeline包括:Checkout-Build-Release

第四步:保存退出

第五步:提交代码,触发CI

第六步:查看运行情况和结果,通过CI控制台,Blue Ocean

② slave节点分配

groovy中通过node的参数labels来选择slave,用法跟jenkins1里的一样,我们需要先定义jenkins node,且给jenkins node定义label,然后在groovy里使用node加label来选择slave。

③ workspace分配

当node执行steps的时候会自动分配workspace,用于checkout代码,运行命令和其他任务。在step执行的时候workspace是被lock的,workspace只能同时被一个build使用。如果多个build需要使用同一个node的workspace,新的workspace将会被自动分配。

  •  全局变量:jenkins的job有一些内置的默认的环境变量,可以通过http://xx.xx.xx.xx:8080/job/****/pipeline-syntax/globals来查看job默认的环境变量

④ 增加静态检查

第一步:运行环境上安装Scalastyle工具包(已经安装好)

第二步:通过Snippet Generator生成Scalastyle插件使用代码

第三步:通过Replay Pipeline更新Pipeline脚本

第四步:运行,查看结果

  •  step/插件使用:每个step都是由对应的Jenkins插件来实现的,点击旁边的帮助按钮可以查看

jenkins多分支pipeline jenkins pipeline实例_jenkins多分支pipeline_02

  •  Snippet Generator:Step库的官方参考手册成功的延续了Jenkins一贯的惜字如金风格,大多数Step都只有一句话的描述和一些参数类型,罕有使用样例,比如Git Step。要理解这些Step,基本靠脑补。好在Jenkins提供了一款良心产品,Snipper Generator,帮助使用者在Pipeline配置界面3步生成正确的调用语句
  •  Replay Pipeline:为了避免重复打开配置界面调整Pipeline脚本,Jenkins贴心的提供了Replay功能。打开任意一次执行历史,在左侧点击Replay按钮,即可复原该次执行所运行的Pipeline脚本,无论脚本来源是任务本身还是远程仓库

⑤ 单元测试和静态检查scalastyle并行执行

第一步:修改脚本增加parallel、node

第二步:通过Snippet Generator生成ws,splitTests插件使用代码

第三步:通过Replay Pipeline更新Pipeline脚本

第四步:运行,查看结果

  • stash/unstash:在stash被引入pipeline DSL前,一般使用archive来实现node或stage间文件的共享。 在stash引入后,最好使用stash/unstash来实现node/stage间文件的共享。例如在不同的node/stage间共享源代码。archive用来实现更长时间的文件存储
  •  Parallel:pipeline能够使用parallel来同时执行多个任务。prallel里的语句使用了node,这意味着并行执行的任务将会在新的node/slave上执行,且使用不同的workspace,为了确保所有的node和workspace使用相同的代码,所以才有了前面的打包stash和parallel里的解包unstash
  •  splitTests:此插件可以将测试分割,以便并行执行。splitTests将会将所有的测试分割为大概等价的N份,然后N个task并行运行。如果N个task运行在不同的slave上,则可以看到job总的时间将会减为1/N

⑥ Multibranch Pipeline

第一步:在分支version_a根目录下创建Jenkinsfile

第二步:新建multibranch pipeline job:multibranch_pipeline_test_lyl

  •  配置Include branches为version_*
  •  配置Periodically if not otherwise run为1分钟

第三步:创建新分支:version_b,查看是否自动生成job

第四步:在分支version_b根目录下创建Jenkinsfile,与version_a不同

第五步:push Jenkinsfile。查看是否自动开始构建

⑦ 参数化构建(properties/parameters)

第一步:通过Snippet Generator生成properties 相关代码

第二步:编辑Jenkinsfile,添加上述代码,并且增加相关参数打印

第三步:点击“Build with Parameters”触发构建

第四步:查看日志中的参数打印内容