1. 程式人生 > 其它 >Jenkins Pipeline的用法

Jenkins Pipeline的用法

技術標籤:JenkinsshellPipelineparallel

Jenkins Pipeline的用法

一、基本原理

Jenkins Pipeline是一套外掛,將持續交付的實現和實施整合到 Jenkins 中。Jenkins Pipeline 提供了一套可擴充套件的工具,用於將“簡單到複雜”的交付流程實現為“持續交付即程式碼”。

Pipeline 的定義通常被寫入到一個文字檔案(稱為 Jenkinsfile )中,該檔案可以被放入專案的原始碼控制庫中。

1. Pipeline指令碼的一個簡單例子:在stages{...}中可以有多個stage指定,stage之間可以順序執行,也可通過parallel並行執行,還可以巢狀stages。

pipeline {
    agent any
    stages {
        stage('Stage1') {
            steps {
                echo 'first execute stage.'
            }
        }
        stage('parallel execute stage') {
            parallel {                 //並行stage
                stage('Stage2.1') {
                    steps {
                        echo "parallel 1 start."
                    }
                }
                stage('Stage2.2') {
                    steps {
                        echo "parallel 2 start."
                    }
                }
            }
        }
        stage('Stage3') {
            steps {
                echo 'finally execute stage.'
            }
        }
    }
}

執行是檢視效果:

二、用到的語法

最近研究pipeline並行stage,實現根據列表變數自動生成多個stage並行的功能。總結幾點pipeline語法:

1. checkout程式碼到某個目錄

dir('${dir}') {   //dir:檔案路徑
	git branch: 'master', url: '${git_url}'   //git_url:遠端倉庫地址
}

2. 獲取引數

引數實現可配置,選取Choice型別引數化:def paramList = params.testsuites.split(',') as List,逗號分隔轉成list,實現自動生成多個stage

3. 根據列表自動生成多個stage

def doTest = paramList.collectEntries {
    ["${it}" : load_test(it)]
}

def load_test(test_name) {
    return {
        stage("test: ${test_name}") {
        	withEnv(["local_test_name=${test_name}"]) {    // 需要withEnv([]) ,不能stage裡shell指令碼獲取不到引數值
        	    sh label: '', script: '''echo "test1"
			    echo "Run test: ${local_test_name}"'''
        	}
	    }
    }
}

4. parallel:並行執行

script {
    parallel doTest  //並行執行生成的多個stage
}