天天看點

使用Jenkinsfile-Runner對流水線/共享庫測試

使用Jenkinsfile-Runner對流水線/共享庫測試

如果您确實想從CLI運作Pipeline而不啟動完整的Jenkins執行個體,則可以檢視Jenkinsfile-runner項目。在某些情況下可能出于開發/測試目的而适用。

Jenkinsfile Runner是将Jenkins Pipeline執行打包為指令行工具的實驗。預期的用例包括:在功能即服務的上下文中使用Jenkins;協助Jenkinsfile本地編輯;內建測試共享庫。Jenkinsfile Runner可以通過指令行運作也可以通過Docker方式運作。

在指令行中使用

準備工作:需要下載下傳Jenkins的war包,并解壓。

wget jenkins/war-stable/2.204.2/jenkins.war
unzip jenkins.war -d /test/jenkins           

複制

下載下傳Jenkinsfile-runner項目,進行編譯打包并生成可執行程式。

git clone https://github.com/jenkinsci/jenkinsfile-runner.git
cd jenkinsfile-runner/
mvn clean package  -Dmaven.test.failure.ignore=true           

複制

Jenkinsfile-runner 的使用方法:

jenkinsfile-runner -w <path to war>  \
                   -p <path to plugins> \
                   -f <path to Jenkinsfile> \
                   -a "param1=Hello&param2=value2"           

複制

  • -w 指定我們剛才解壓的war目錄
  • -p 指定Jenkins的插件目錄
  • -f 指定我們要運作的Jenkinsfile
  • -a 指定對Jenkinsfile傳遞的參數

編寫一個用于測試的Jenkinsfile。

pipeline {    
    agent any    
    parameters {        
        string(name: 'param1', defaultValue: '', description: 'Greeting message')        
        string(name: 'param2', defaultValue: '', description: '2nd parameter')   
        
    }    
    stages {        
       stage('Build') {           
           steps {
               echo 'Hello world!'
               echo "message: ${params.param1}"
               echo "param2: ${params.param2}"                
               sh 'ls -la'            
           }        
        }    
    }
}           

複制

讓我們使用Jenkinsfile-runner運作測試。

jenkinsfile-runner -w test/jenkins \
                   -p $JENKINS_HOME/plugins \
                   -f Jenkinsfile \
                   -a "param1=Hello&param2=value2"

                   
Started
Running in Durability level: PERFORMANCE_OPTIMIZED
Running on Jenkins in /tmp/jenkinsTests.tmp/jenkins8090792616816810094test/workspace/job
[Pipeline] node
[Pipeline] {
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] echo
Hello world!
[Pipeline] echo
message: Hello
[Pipeline] echo
param2: value2
[Pipeline] sh
[job] Running shell script
+ ls -la
total 12
drwxrwxr-x 2 kohsuke kohsuke 4096 Feb 24 15:36 .
drwxrwxr-x 4 kohsuke kohsuke 4096 Feb 24 15:36 ..
-rw-rw-r-- 1 kohsuke kohsuke    0 Feb 24 15:36 abc
-rw-rw-r-- 1 kohsuke kohsuke  179 Feb 24 15:36 Jenkinsfile
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS           

複制

使用Docker方式

使用docker方式相對簡單許多,我們隻需要下載下傳鏡像,将要測試的jenkinsfile

以volume的當時挂載到容器中即可。

docker run --rm \
           -v $(pwd)/Jenkinsfile:/workspace/Jenkinsfile \
           jenkins4eval/jenkinsfile-runner           

複制

  • -v 挂載本地的Jenkinsfile
  • 鏡像名稱
  • jenkins4eval/jenkinsfile-runner

總結:

在使用jenkinsfile-runner進行測試Jenkinsfile的過程中需要安裝所需的插件,第一種方式是使用目前JenkinsHome目錄中的插件,另一種方式是重新安裝插件。 我覺得每次測試都安裝插件會影響測試的效率,直接使用JenkinsHome中的插件也有可能在遠端不便于使用。總之Jenkinsfile插件還是個問題!。