2017-08-23 63 views
1

我想在幾個shell命令中使用Jenkinsfile中的已定義參數,但我得到一個異常。在我的例子中,我想執行一個簡單的docker命令。該參數定義了docker可執行文件的路徑。在Jenkins文件中使用shell命令對Jenkins管道使用參數

這是我非常短Jenkinsfile

pipeline { 
    agent any 

    parameters { 
    string(defaultValue: '/Applications/Docker.app/Contents/Resources/bin/docker', description: '', name: 'docker') 
    } 

    stages { 
    stage('Test') { 
     steps { 
     sh 'sudo ${params.docker} ps -a' 
     } 
    } 
    } 
} 

而且我得到以下異常:

[e2e-web-tests_master-U4G4QJHPUACAEACYSISPVBCMQBR2LS5EZRVEKG47I2XHRI54NCCQ] Running shell script 
/Users/Shared/Jenkins/Home/workspace/e2e-web-te[email protected]tmp/durable-e394f175/script.sh: line 2: ${params.docker}: bad substitution 

當我改變Jenkinsfile不使用shell命令裏面的放慢參數它成功通過:

pipeline { 
    agent any 

    parameters { 
    string(defaultValue: '/Applications/Docker.app/Contents/Resources/bin/docker', description: '', name: 'docker') 
    } 

    stages { 
    stage('Test') { 
     steps { 
     sh 'sudo /Applications/Docker.app/Contents/Resources/bin/docker ps -a' 
     } 
    } 
    } 
} 

那麼,我該如何使用p在Jenkinsfile中的shell命令內參數?我試過stringtext作爲參數類型。

回答

4

您遇到的問題是單引號是一個標準的java字符串。

雙引號是一個模板化字符串,如果它是模板化的,它將返回一個GString,否則返回一個標準的Java字符串。

所以使用雙引號:

stages { 
    stage('Test') { 
     steps { 
     sh "sudo ${params.docker} ps -a" 
     } 
    } 
    } 

然後params.docker將取代在管道中的 '上海' 腳本里面的$ {} params.docker。