這是開始開車送我瘋了..但似乎我的運氣由我自己看着辦吧:/傳遞系統環境變量到詹金斯從
我需要建立一個機制,分享串兩個從站之間的值,例如,名爲從站A和從站B。
目前最接近最多一個我發現會這樣問: Jenkins Slave Environment Variable Refresh
但它仍然旨在讓在buildscripts訪問,而不是奴隸環境變量本身。 (相關SO問題:How are environment variables used in Jenkins with Windows Batch Command?)
目前我有這種設置:
1)一個工作一個被觸發。
它執行這個窗口批次碼(實際路徑,很明顯,被替換爲「<>」):
cmd /c start java -jar <path_of_slave>\slave.jar -jnlpUrl <url_of_slave>/slave-agent.jnlp
setenv.exe /m HOR_BUILD_ID -delete
setenv.exe /m HOR_BUILD_ID %BUILD_NUMBER%
setenv.exe /m HOR_UPSTREAM_ID -delete
setenv.exe /m HOR_UPSTREAM_ID %JOB_NAME%
不言自明和直向前IMHO。
2)作業A有上游作業B,這是在成功構建時觸發的。 所以,在從屬乙的乙構建執行該批次碼(實際路徑,很明顯,被替換爲 '<>'):
SetLocal EnableDelayedExpansion
@echo off
@echo --- Refreshing Environemnt variables...
@echo on
set prgfil=%ProgramFiles(x86)%
call "%WORKSPACE%\..\..\..\tools\misc\resetvars.bat"
@echo --- Reading environment variables...
copy /y "<path_containing_%HOR_UPSTREAM_ID%_variable" "<path_containing_%HOR_BUILD_ID%_variable"
if !errorlevel!==0 goto ok1
goto error
:ok1
goto end
:error
EndLocal
exit /b 1
:end
EndLocal
注:resetvars.bat和resetvars.vbs是從這個太問題採取:Is there a command to refresh environment variables from the command prompt in Windows?
輸出(%HOR_BUILD_ID%和%HOR_UPSTREAM_ID%的值),仍然是過時的......只有這樣,才能獲得新的變量刷新是重新啓動織補詹金斯(主)服務,但這是defi netly不走在CI環境...
現在的問題表面 - 如何使這些變量被刷新/重新讀取當乙的構建工作乙被觸發,這樣我就可以訪問使用例如EnvInject插件的從站的系統變量?
另一個SO問題和需要用戶交互的答案,所以在我的情況不能接受:Jenkins - passing variables between jobs?
這也不會在我的情況下工作:http://comments.gmane.org/gmane.comp.java.hudson.user/37897
也許Slave及其相應的節點不能接收變量/內核地解析其環境,導致無法檢索到全局envirtone mtn變量?切斷它,突然有一些有趣的環境變量 config data我的眼睛:
NODE_LABELS |一個prodreleases
NODE_NAME |一個
...這是從乙,但它應該是不同的值,因爲這原本是奴隸一個 ...什麼地獄????????????? ????? !!!! :/
我開始覺得根源問題是Jenkins在解析多個從節點NODE信息時有bug。
決定到@詹金斯JIRA創建一個問題:https://issues.jenkins-ci.org/browse/JENKINS-15397
嘿夥計,我聽不懂你寫的一切。但基本上我確實能夠通過螞蟻腳本傳遞Jenkins系統變量。 –
這對於這樣的基本需求來說是過分膨脹和java解析馬力。 :/ –
我會避免通過Jenkins腳本/作業在從站之間傳遞數據 - 當添加從站或使從站脫機時,這可能會中斷。鏈接作業(如@zagrev所建議的)是一種更好的方式,然後您可以將數據傳遞給工件或使用插件。 –