pipeline 步骤(中)

2021-06-03 18:02:38 浏览数 (1)

二.制品相关

存取临时文件

stash步骤可以将一些文件保存起来,以便被同一次构建的其他步骤或阶段使用。如果整个pipeline的所有阶段在同一台机器上执行,则stash步骤是多余的。所以,通常需要stash的文件都是要跨Jenkins node使用的。

stash步骤会将文件存储在tar文件中,对于大文件的stash操作将会消耗Jenkins master的计算资源。Jenkins官方文档推荐,当文件大小为5∼100MB时,应该考虑使用其他替代方案。

stash步骤的参数列表如下:

  • name:字符串类型,保存文件的集合的唯一标识。
  • allowEmpty:布尔类型,允许stash内容为空。
  • excludes:字符串类型,将哪些文件排除。如果排除多个文件,则使用逗号分隔。留空代表不排除任何文件。
  • includes:字符串类型,stash哪些文件,留空代表当前文件夹下的所有文件。
  • useDefaultExcludes:布尔类型,如果为true,则代表使用Ant风格路径默认排除文件列表。

除了name参数,其他参数都是可选的。excludes和includes使用的是Ant风格路径表达式。

unstash步骤取出之前stash的文件。只有一个name参数,即stash时的唯一标识。通常stash与unstash步骤同时使用。

stash步骤在master节点上执行,而unstash步骤在node2节点上执行。

  1. pipeline {
  2.     agent none
  3.     stages {
  4.         stage('stash') {
  5.             agent { label "master" }
  6.             steps {
  7.                 script {
  8.                     writeFile file: "a.txt", text: "$BUILD_NUMBER"
  9.                     stash(name: "abc", include: "a.txt")
  10. }
  11. }
  12. }
  13.         stage("unstash") {
  14.             agent { label "node2" }
  15.             steps {
  16.                 script {
  17.                     unstash("abc")
  18.                     def content = readFile("a.txt")
  19.                     echo "${content}"
  20. }
  21. }
  22. }
  23. }
  24. }

三.命令相关

script

直接执行groovy的命令会报错,需要用script括起来。与命令相关的步骤其实是Pipeline:Nodes and Processes插件提供的步骤。由于它是Pipeline插件的一个组件,所以基本不需要单独安装。

  1. script {
  2. def browsers = ['chrome', 'firefox']
  3. for (int i = 0; i < brosers.size(); i) {
  4. echo "this is ${browsers[i]}"
  5. }
  6. }

sh

执行shell命令

sh步骤支持的参数有:

  • script:将要执行的shell脚本,通常在类UNIX系统上可以是多行脚本。
  • encoding:脚本执行后输出日志的编码,默认值为脚本运行所在系统的编码。
  • returnStatus:布尔类型,默认脚本返回的是状态码,如果是一个非零的状态码,则会引发pipeline执行失败。如果returnStatus参数为true,则不论状态码是什么,pipeline的执行都不会受影响。
  • returnStdout:布尔类型,如果为true,则任务的标准输出将作为步骤的返回值,而不是打印到构建日志中(如果有错误,则依然会打印到日志中)。除了script参数,其他参数都是可选的。
  • returnStatus与returnStdout参数一般不会同时使用,因为返回值只能有一个。如果同时使用,则只有returnStatus参数生效。
  1. sh "ls"
  2. sh(script: "/root/test.sh", returnStdout: true)

bat、powershell

bat步骤执行的是Windows的批处理命令。powershell步骤执行的是PowerShell脚本,支持3 版本。这两个步骤支持的参数与sh步骤的一样。

四.调用其它pipeline

在Jenkins pipeline中可以使用build步骤实现调用另一个pipeline功能。build步骤是pipeline插件的一个组件,所以不需要另外安装插件,可以直接使用。

build步骤其实也是一种触发pipeline执行的方式,它与triggers指令中的upstream方式有两个区别: 1.build步骤是由上游pipeline使用的,而upstream方式是由下游pipeline使用的。 2.build步骤是可以带参数的,而upstream方式只是被动触发,并没有带参数。

调用本章开头的例子,可以steps部分这么写:

  1. steps {
  2.     build(
  3.         job:"parameters-example",
  4.         parameters: [
  5.             booleanParam(name:'userFlag', value:true)
  6. ]
  7. )
  8. }

build步骤的基本2个参数 job(必填):目标Jenkins任务的名称 parameters(可选):数组类型,传入目标pipeline的参数列表。传参方法与定参方法类似

  1. parameters: [
  2.     booleanParam(name:'DEBUG_BUILD', value:true),
  3.     password(name:'PASSWORD', value:'prodSECRET'),
  4.     string(name:'DEPLOY_ENV', value:'prod'),
  5.     text(name:'DEPLOY_TEXT', value:'anbncn'),
  6.     string(name:'CHOICES00', value:'dev')
  7. ]

我们注意到choice类型的参数没有对应的传参方法,而是使用string传参方法代替的。

除此之外,build步骤还支持其他三个参数 propagate(可选): 布尔类型,如果值为true,则只有当下游pipeline的最终结构状态为SUCCESS时,上游pipeline才算成功;如果值为flase,则不论下游pipeline的最终构建状态是什么,上游pipeline都忽略。默认值为true

quietPeriod(可选): 整形,触发下游pipeline后,下游pipeline等待多久执行。如果不设置此参数,则等待时长由下游pipeline确定,单位为秒。

wait(可选): 布尔类型,是否等待下游pipeline执行完成。默认值为true。

如果你使用了Folder插件,那么就需要注意build步骤的job参数的写法了。 使用Folder插件,可以让我们像管理文件夹下的文件一样来管理Jenkins项目。我们的Jenkins项目可以创建在这些文件夹下。如果目标pipeline与源pipeline在同一目录下,则可以直接使用名称; 如果不在同一目录下,则需要指定相对路径,如 ../sister-folder/downstream 或绝对路径。

0 人点赞