2015-04-23 83 views
1

我有一個名爲MyPath的字符串參數的Jenkins作業,一個groovy腳本構建步驟,然後是一個批處理命令構建步驟。更改Jenkins之間的環境變量構建步驟

如果我啓動了一個作業,以便的MyPath值爲「C:\Temp\」,我想Groovy腳本改變MyPath值是「C:\Temp\3.4\setup.exe」,然後我想使用批處理文件來執行MyPath

我知道我可以從groovy啓動一個進程,並且我可以批量執行我的groovy邏輯,如果我可以在構建步驟之間傳遞變量,那就好了。

要在groovy中使用參數,您必須使用庫來解決它(下面)。有沒有可以設置它的方法?

def path = build.buildVariableResolver.resolve("MyPath"); 

像這樣的東西會是完美的,如果它存在:

buildVariableChanger.change("MyPath") = "C:\3.4\setup.exe"

我也進去看了EnvInject插件,但據我理解,不支持什麼,我想做的事情。

謝謝。

回答

2

我不認爲這是可能的,因爲對於StringParameterValue.class字段的值是最後:http://javadoc.jenkins-ci.org/hudson/model/StringParameterValue.html

該解決方案可以在Groovy腳本

import hudson.model.StringParameterValue 
import hudson.model.ParametersAction 

def newPath = build.buildVariableResolver.resolve("MyPath") + "3.4\\setup.exe" 
build.addAction(new ParametersAction (new StringParameterValue ('path2', newPath))) 

可以創建其他參數,然後使用參數路徑2中批量命令

+0

謝謝,而其他答案的工作,這正是我正在尋找的解決方案。 – Aeropher

1

一個選項應該是使用Windows命令SETX來設置用戶(或系統)環境變量的值。

如果您在Groovy步驟中設置了此變量,那麼批處理步驟應該可以使用它。

+0

我在Windows 2008 R2服務器上做了一個快速測試。 setx MY_VAR「值」。 該變量在當前的dos命令窗口中不可用。 但是,如果我打開一個新的dos命令,我可以用set命令查看MY_VAR變量。 所以你不需要重啓就可以用setx設置一個變量。 也許這種解決方案將工作,待測試... –

+0

你是對的。很抱歉,請以某種方式編輯您的答案,以便我可以放棄它。 – MichaelS

+0

完成,downvote沒有問題。 –

0

爲什麼不簡單地將一個變量傳遞給你的批處理?您可以從第一個腳本開始批處理,而不是使用自己的構建步驟啓動它。請撥打電話yourscript.bat C:\3.4\setup.exe。您可以使用%1訪問參數。如果將行%1插入到bat文件中,它將執行C:\3.4\setup.exe

+2

正如我下面所說的,SETX命令可以在不重啓的情況下更改一個值。 –

+0

剛剛測試過,你是對的。修改我的答案。抱歉。 – MichaelS

+1

這絕對是一個可能的解決方案,但我想保留Jenkins作業中的所有代碼,因爲我發現它更易於維護。我正在積極嘗試減少我在Jenkins以外的批處理文件中的代碼量,因爲保持它們的組織是令人討厭的。我想我可以使用「提供配置文件」選項來交付批處理文件,但讓代碼在某處仍然會讓我感到不安。 – Aeropher

相關問題