前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pipeline 步骤(中)

pipeline 步骤(中)

原创
作者头像
陈不成i
修改2021-06-03 18:02:38
1.6K0
修改2021-06-03 18:02:38
举报
文章被收录于专栏:ops技术分享

二.制品相关

存取临时文件

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:'a\n\b\nc\n'),
  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 或绝对路径。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二.制品相关
    • 存取临时文件
    • 三.命令相关
      • script
        • sh
          • bat、powershell
          • 四.调用其它pipeline
          相关产品与服务
          文件存储
          文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档