![](/img/trans.png)
[英]How to invoke bash functions defined in a resource file from a Jenkins pipeline Groovy script?
[英]jenkins - how to pass a value from bash to groovy?
我正在使用兩個腳本組件進行詹金斯安裝。 在bash位運行,然后再時髦 。 我希望能夠從bash腳本-> groovy腳本傳遞一個值(屬性?其他?)。
這可能嗎? 我是否需要將該值寫入屬性文件並以常規方式讀回?
編輯:我的目標是在bash中生成一個build#並將其傳遞給groovy,以便我可以在jenkins顯示中設置描述並構建#。 看來groovy在構建服務器上不可用,所以我正在尋找另一個方向。 目前正在嘗試使用“ postbuild”插件和“ env-inject”插件。 公開征求意見。
要使此成功,請考慮以下幾點:
# foo.sh
export foo=bar
groovy myscript.groovy
# myscript.groovy
def env = System.getenv()
String myvar=env['foo']
println myvar
運行foo.sh應該會產生以下結果:
./foo.sh
bar
如果出於某種原因而不希望導出變量(可能有充分而有效的理由),則仍可以將變量作為“系統屬性” 顯式傳遞給groovy腳本:
# foo.sh
foo=bar
groovy -Dfoo="$foo" yourscript.groovy
# yourscript.groovy
String yourvar = System.properties['foo']
println yourvar
產生以下結果:
$ ./foo.sh
bar
$
最好的方法是設置一個環境變量,以將信息從bash共享到groovy。 您也可以使用標准輸入/輸出來傳送內容。
因此,如果您在bash腳本中設置env,則在該腳本之外將無法使用它。 不用執行bash腳本,而是在jenkins的命令中內聯該腳本。 運行您的bash代碼,然后調用groovy腳本。
像下面這樣
#do somebash scripting
VARIABLE="something"
#call your groovy code
groovy util.groovy
您的常規代碼(util.groovy):
String variable = env['VARIABLE']
我只是在這個問題上工作了幾天,以為我可以分享我發現的東西。 我必須從.sh文件訪問groovy文件中的變量,並且在第一次抓取變量時遇到了困難。 不過,有一種簡單的方法可以做到這一點。 這是我所做的:
在bash文件中,將值保存在變量中。 然后在常規腳本中執行以下操作:
variableToGet = sh(returnStdout: true, script: """
. ${DIRECTORY}/bash_file.sh
echo \$VARIABLE
""").trim()
希望這可以幫助。 這個問題是一個很好的挑戰! 需要特別注意的是,無論您要獲取哪種類型的變量,標准輸出都將返回String。 如果需要使用整數值,則可以將整數值與Integer.parseInt(variableToGet)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.