摘要:當使用並行構建時,Groovy中的工作空間路徑與shell相比有所不同。我如何從DSL或Groovy獲得實際的工作空間?Jenkins多分支管道工作空間位置:shell與Groovy
詳細說明:
我們的工作區經由ws('/path/to/workspace')
定義。
我試圖使用相對路徑,只需package.json
,在通常是工作區根目錄的當前目錄中打開該文件。當作爲外殼運行時,sh 'jq -r ".version" package.json'
它工作正常,我可以讀取package.json
沒有任何問題。
但是使用Groovy:
def version = new groovy.json.JsonSlurper().parseText(new File("package.json").text)[ 'version' ]
注new File("package.json")
那麼它失敗並聲稱$WORKSPACE/package.json
不存在。儘管我們使用ws
來設置上面的工作空間,但我可以看到它最終成爲像/path/to/workspace/my_job-SOMERANDOMCHARS ...而不是ws
中指定的目錄。
我知道在並行工作負載中,我們需要使工作空間獨特,所以這並非意外。但是,我應該如何確定Groovy中的工作空間?或者期望總是突然出現在實際在節點上運行的shell中?
更新:更多的上下文
這是如何被使用的一些詳細信息。我們的Groovy(不是聲明式)管道沿着這些線做了一些事情:
stage('tests') {
parallel(
'Unit Tests': {
node('unitNode') {
ws('/path/to/workspace') {
new file("${env.WORKSPACE}/package.json") // does not work
sh 'cat $WORKSPACE/package.json' // works OK
}
}
},
'E2E Tests': {
node('e2eNode') {
ws('/path/to/workspace') {
new file("${env.WORKSPACE}/package.json") // does not work
sh 'cat $WORKSPACE/package.json' // works OK
}
}
}
)
}
我已經添加了一些更多的上下文,以瞭解我如何嘗試使用工作區位置。 –
我玩過你的額外細節。我似乎無法複製。這些代碼在你那正常嗎? –
如果將'ws'位置設置爲兩個並行分支的同一目錄,該怎麼辦? –