Jenkins(四)

欢迎关注我公众号呀~「测试游记」「zx94_11」

文件目录相关操作

  • deleteDir:删除当前目录

  • dir:切换到目录

    • 默认流水线工作在工作空间目录下,dir步骤可以让我们切换到其他目录
    dir('/tmp'){
       deleteDir()
    }
    
  • fileExists:判断文件是否存在,结果返回布尔值

  • isUnix:判断是非为UNIX系统,如果是则返回true

  • pwd:返回当前所在目录

  • 有一个布尔类型的可选参数tmp,如果为true,则返回与当前工作空间关联的临时目录

  • writeFile:将内容写入指定文件中

    • file:文件路径,可以是绝对路径,也可以是相对路径
    • text:要写入的文件内容
    • encoding:目标文件的编码。如果为空,则使用操作系统默认的编码
  • readFile:读取文件

    • file:路径,同上
    • encoding:编码,同上
script{
   writeFile(file:"base64File", text:"amVua2lucyBib29r", encoding:"Base64")
   def content = readFile(file:"base64File", encoding: "UTF-8")
   echo "${content}"
}
修改Jenkinsfile
执行结果

amVua2lucyBib29rjenkins book的Base64编码

转码

制品相关步骤

  • stash:保存临时文件

    将文件保存起来,以便同一次构建的其他步骤或阶段使用。

    如果整个流水线在同一台机器上执行,那stash是多余的,一般用于跨Jenkins node使用。

    stash步骤会将文件存储在tar文件中,对于大文件的stash操作会消耗Jenkins master的计算资源。

    • name:字符串类型,保存文件的集合的唯一标识

    • allowEmpty:布尔类型,允许stash内容为空

    • excludes:字符串类型,排除文件,如果排除多个使用「逗号」分隔

    • includes:字符串类型,stash文件,留空表示全部

    • useDefaultExcludes:布尔类型,true:使用Ant风格路径默认排除文件

  Ant风格
  
  | 通配符 | 说明                    |
  | ------ | ----------------------- |
  | `?`    | 匹配任何单字符          |
  | `*`    | 匹配0或者任意数量的字符 |
  | `**`   | 匹配0或者更多的目录     |
  
  | URL路径                  | 说明                                                         |
  | ------------------------ | ------------------------------------------------------------ |
  | /project/`*`.a           | 匹配**项目根路径**下所有在project路径下的.a文件              |
  | /project/p`?`ttern       | 匹配**项目根路径**下 /project/pattern 和 /app/pXttern等,但是不包括/app/pttern |
  | /`**`/example            | 匹配项目根路径下 /project/example, /project/foow/example, 和 /example等 |
  | /app/`**`/dir/file.`*` | 匹配(Matches) /app/dir/file.jsp, /app/foo/dir/file.html,/app/foo/bar/dir/file.pdf, 和 /app/dir/file.java等 |
  | /`**`/`*`.jsp            | 匹配(Matches)任何的.jsp 文件                                 |
  
  最长匹配原则:
  /project/dir/file.jsp,现在存在两个路径匹配模式`/**/*.jsp`和`/project/dir/*.jsp`,那么会根据模式`/project/dir/*.jsp`来匹配
  • unstash:取出之前stash的文件

    pipeline {
        agent none
        stages {
            stage('stash') {
                agent {label "master"}
                steps {
                    writeFile file: "a.txt",text: "$BUILD_NUMBER"
                    stash(name: "abc", includes: "a.txt")
                }
            }
            stage('unstash') {
                agent {label "node2"}
                steps {
                    script {
                        unstash("abc")
                        def content = readFile("a.txt")
                        echo "${content}"
                    }
                }
            }
        }
    }
    

命令相关

  • sh:执行shell命令

    • script:要执行的shell脚本

    • encoding:脚本执行后输出日志的编码,默认为系统编码

    • returnStatus:布尔类型,默认返回状态码,如果是非零则流水线执行失败。设置为true后,无论什么状态码,流水线执行都不受影响

    • returnStdout:布尔类型,如果为true,任务的标准输出将作为步骤的返回值,而不是打印到构建日志中(如果有错误,则依旧会打印到日志中)

      ⚠️returnStatus和returnStdout同时使用,只有returnStatus生效

  • bat,powershell步骤

    • bat步骤执行Windows的批处理命令
      • 支持参数类型sh
    • powershell执行的是PowerShell脚本
      • 支持参数类似sh

其他步骤

  • error:主动报错,中止pipeline

    • error(“there is a error”)
  • tool:使用预定义的工具

    • name:工具名称

    • type(可选):工具类型,指该工具安装类的全路径类名

    • 在Global Tool Configuration(全局工具配置)中配置了工具

      全局工具配置
      image-20190712222337303
  • timeout:代码块超时时间

    • time:整型
    • unit(可选):时间单位,默认分钟。支持NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES(默认),HOURS,DAYS
    • activity(可选):布尔类型,true时 只有当日志没活动才算真正的超时
  • waitUntil:等待条件满足

    timeout(50) {
       waitUntil{
          script{
             def r = sh script: 'curl http://exmple',return Status: true
             return (r == 0)
          }
       }
    }
    
  • retry:重复执行块

    steps {
       retry(20){
          script{
             sh script: 'curl http://exmple',return Status: true
          }
       }
    }
    

    ⚠️如果某次retry抛出异常,只中止当次,不会中止整个retry的执行

    在执行retry的过程中,用户是无法中止流水线的

  • sleep:休眠一段时间

    • time:整型,休眠时间
    • unit(可选):时间单位,默认秒,与timeout类似
    • 示例:sleep(120) // 休眠120秒sleep(time:'2',unit:"MINUTES") // 休眠2分钟

编写Jenkinsfile

推荐VS Code扩展:Jenkins Pipeline Linter Connector

  1. 安装
  2. 配置扩展
  3. 配置Jenkins服务器
  4. 运行
Jenkins Pipeline Linter Connector
配置插件
配置CSRF
运行校验

故意写错了进行校验:

错误进行校验
Errors encountered validating Jenkinsfile:
WorkflowScript: 14: unexpected token: } @ line 14, column 1.
   }
   ^
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容