Jenkins(四)

歡迎關(guān)注我公眾號(hào)呀~「測(cè)試游記」「zx94_11」

文件目錄相關(guān)操作

  • deleteDir:刪除當(dāng)前目錄

  • dir:切換到目錄

    • 默認(rèn)流水線工作在工作空間目錄下,dir步驟可以讓我們切換到其他目錄
    dir('/tmp'){
       deleteDir()
    }
    
  • fileExists:判斷文件是否存在,結(jié)果返回布爾值

  • isUnix:判斷是非為UNIX系統(tǒng),如果是則返回true

  • pwd:返回當(dāng)前所在目錄

  • 有一個(gè)布爾類(lèi)型的可選參數(shù)tmp,如果為true,則返回與當(dāng)前工作空間關(guān)聯(lián)的臨時(shí)目錄

  • writeFile:將內(nèi)容寫(xiě)入指定文件中

    • file:文件路徑,可以是絕對(duì)路徑,也可以是相對(duì)路徑
    • text:要寫(xiě)入的文件內(nèi)容
    • encoding:目標(biāo)文件的編碼。如果為空,則使用操作系統(tǒng)默認(rèn)的編碼
  • readFile:讀取文件

    • file:路徑,同上
    • encoding:編碼,同上
script{
   writeFile(file:"base64File", text:"amVua2lucyBib29r", encoding:"Base64")
   def content = readFile(file:"base64File", encoding: "UTF-8")
   echo "${content}"
}
修改Jenkinsfile
執(zhí)行結(jié)果

amVua2lucyBib29rjenkins book的Base64編碼

轉(zhuǎn)碼

制品相關(guān)步驟

  • stash:保存臨時(shí)文件

    將文件保存起來(lái),以便同一次構(gòu)建的其他步驟或階段使用。

    如果整個(gè)流水線在同一臺(tái)機(jī)器上執(zhí)行,那stash是多余的,一般用于跨Jenkins node使用。

    stash步驟會(huì)將文件存儲(chǔ)在tar文件中,對(duì)于大文件的stash操作會(huì)消耗Jenkins master的計(jì)算資源。

    • name:字符串類(lèi)型,保存文件的集合的唯一標(biāo)識(shí)

    • allowEmpty:布爾類(lèi)型,允許stash內(nèi)容為空

    • excludes:字符串類(lèi)型,排除文件,如果排除多個(gè)使用「逗號(hào)」分隔

    • includes:字符串類(lèi)型,stash文件,留空表示全部

    • useDefaultExcludes:布爾類(lèi)型,true:使用Ant風(fēng)格路徑默認(rèn)排除文件

  Ant風(fēng)格
  
  | 通配符 | 說(shuō)明                    |
  | ------ | ----------------------- |
  | `?`    | 匹配任何單字符          |
  | `*`    | 匹配0或者任意數(shù)量的字符 |
  | `**`   | 匹配0或者更多的目錄     |
  
  | URL路徑                  | 說(shuō)明                                                         |
  | ------------------------ | ------------------------------------------------------------ |
  | /project/`*`.a           | 匹配**項(xiàng)目根路徑**下所有在project路徑下的.a文件              |
  | /project/p`?`ttern       | 匹配**項(xiàng)目根路徑**下 /project/pattern 和 /app/pXttern等,但是不包括/app/pttern |
  | /`**`/example            | 匹配項(xiàng)目根路徑下 /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 文件                                 |
  
  最長(zhǎng)匹配原則:
  /project/dir/file.jsp,現(xiàn)在存在兩個(gè)路徑匹配模式`/**/*.jsp`和`/project/dir/*.jsp`,那么會(huì)根據(jù)模式`/project/dir/*.jsp`來(lái)匹配
  • 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}"
                    }
                }
            }
        }
    }
    

命令相關(guān)

  • sh:執(zhí)行shell命令

    • script:要執(zhí)行的shell腳本

    • encoding:腳本執(zhí)行后輸出日志的編碼,默認(rèn)為系統(tǒng)編碼

    • returnStatus:布爾類(lèi)型,默認(rèn)返回狀態(tài)碼,如果是非零則流水線執(zhí)行失敗。設(shè)置為true后,無(wú)論什么狀態(tài)碼,流水線執(zhí)行都不受影響

    • returnStdout:布爾類(lèi)型,如果為true,任務(wù)的標(biāo)準(zhǔn)輸出將作為步驟的返回值,而不是打印到構(gòu)建日志中(如果有錯(cuò)誤,則依舊會(huì)打印到日志中)

      ??returnStatus和returnStdout同時(shí)使用,只有returnStatus生效

  • bat,powershell步驟

    • bat步驟執(zhí)行Windows的批處理命令
      • 支持參數(shù)類(lèi)型sh
    • powershell執(zhí)行的是PowerShell腳本
      • 支持參數(shù)類(lèi)似sh

其他步驟

  • error:主動(dòng)報(bào)錯(cuò),中止pipeline

    • error(“there is a error”)
  • tool:使用預(yù)定義的工具

    • name:工具名稱(chēng)

    • type(可選):工具類(lèi)型,指該工具安裝類(lèi)的全路徑類(lèi)名

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

      全局工具配置
      image-20190712222337303
  • timeout:代碼塊超時(shí)時(shí)間

    • time:整型
    • unit(可選):時(shí)間單位,默認(rèn)分鐘。支持NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES(默認(rèn)),HOURS,DAYS
    • activity(可選):布爾類(lèi)型,true時(shí) 只有當(dāng)日志沒(méi)活動(dòng)才算真正的超時(shí)
  • waitUntil:等待條件滿(mǎn)足

    timeout(50) {
       waitUntil{
          script{
             def r = sh script: 'curl http://exmple',return Status: true
             return (r == 0)
          }
       }
    }
    
  • retry:重復(fù)執(zhí)行塊

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

    ??如果某次retry拋出異常,只中止當(dāng)次,不會(huì)中止整個(gè)retry的執(zhí)行

    在執(zhí)行retry的過(guò)程中,用戶(hù)是無(wú)法中止流水線的

  • sleep:休眠一段時(shí)間

    • time:整型,休眠時(shí)間
    • unit(可選):時(shí)間單位,默認(rèn)秒,與timeout類(lèi)似
    • 示例:sleep(120) // 休眠120秒sleep(time:'2',unit:"MINUTES") // 休眠2分鐘

編寫(xiě)Jenkinsfile

推薦VS Code擴(kuò)展:Jenkins Pipeline Linter Connector

  1. 安裝
  2. 配置擴(kuò)展
  3. 配置Jenkins服務(wù)器
  4. 運(yùn)行
Jenkins Pipeline Linter Connector
配置插件
配置CSRF
運(yùn)行校驗(yàn)

故意寫(xiě)錯(cuò)了進(jìn)行校驗(yàn):

錯(cuò)誤進(jìn)行校驗(yàn)
Errors encountered validating Jenkinsfile:
WorkflowScript: 14: unexpected token: } @ line 14, column 1.
   }
   ^
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容