2017-05-26 30 views
0

我在Groovy腳本中遇到問題,其中該變量在shell腳本部分中不可訪問。Groovy參數在Jenkinsfile的shell部分中不可見

腳本-1:

def a=20; 
println ("a is: $a"); 

輸出-1:

a is: 20 

腳本-2:

def a=20; 
println ("a is: $a"); 
sh '''echo a is $a'''; 

輸出-2:

常規。 lang.MissingMethodException:沒有方法的簽名:Script1.sh()適用於參數類型:(java.lang.String)values:[echo a是$ a] 可能的解決方案:use([Ljava.lang.Object;)是(java.lang.Object繼承),運行(),運行(),任(),用(groovy.lang.Closure) 在Script1.run(Script1.groovy:3)

哪有我在殼牌部分sh中獲得$a = 20。換句話說,需要在shell腳本部分中傳遞變量$ a所需的操作。

我正在寫一個Jenkins管道的上下文中的腳本,我正面臨一個問題,即groovy變量在shell部分中不可見。

回答

1

這個工程:

pipeline { 
    agent any 
    stages { 
     stage('Example') { 
      steps { 
       script { 
        // a is accessible globally in the Jenkinsfile 
        a = 20 
        // b is only accessible inside this script block 
        def b = 22 
        sh "echo a is $a" 
        sh "echo b is $b" 
       } 
      } 
     } 
    } 
    post { 
     always { 
      sh "echo a is $a" 
     } 
    } 
} 

您應該使用雙引號的Shell語句,而不是三聯單引號。

+0

謝謝,我學到了一兩件事,但你確定第二點嗎?在一個普通的Groovy腳本中,情況並非如此(如OP所示),但是在Jenkins Pipeline腳本中卻有所不同? (我明白他們是......特別的)。或者你的意思是我們*應該使用大括號? (我明白) – qlown

+0

@qlown你是對的,第二點是不正確的。調整我的答案。 – haschibaschi

+0

@haschibaschi,請參考此鏈接https://groovyconsole.appspot.com/script/5088905221111808我仍然得到相同的問題 – Yash

相關問題