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.
   }
   ^
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容