2010-12-03 85 views
1

我想在Hudson中設置一個參數化版本,它只接受一個參數 - 要創建的版本類型(QA,Stage,Production)。但是,每個構建都需要設置幾個不同的環境變量。類似的信息(僞):在Hudson中,如何給定一個參數來設置多個環境變量?

if ${CONFIG} == "QA" then 
    ${SVN_PATH} = "branches/dev" 
    ${BUILD_CONFIG} = "Debug" 
    # more environment variables... 
else if ${CONFIG} == "Production" then 
    ${SVN_PATH} = "trunk" 
    ${BUILD_CONFIG} = "Release" 
    # more environment variables... 
else # more build configurations... 
end if 

有我們無數的建設步驟 - 從顛覆拉,然後運行的MSBuild的命令,DOS批處理文件和PowerShell腳本的組合。

我們通常會從哈德森接口安排我們的構建,並且我希望參數條目儘可能防止白癡。

有沒有辦法做到這一點?

回答

6

既然你爲發佈做了很多事情,那麼怎麼樣編寫Hudson之外的所有步驟。你可以使用ant,批處理文件或者你喜歡的任何腳本語言。把這個腳本放到你的scm中以獲得修訂控制。

親的:

  • 你的邏輯出哈德森的,因爲只有哈德森調用腳本。
  • 您不需要創建需要在shell(全局變量)之間持久化的環境變量。
  • 您可以使用配置/屬性文件爲每個環境,你也應該投入到版本控制
  • 可以哈德森之外運行這些腳本,如果你需要
  • 哈德森工作配置獲取的方式更容易
  • 你沒有改變全局環境變量的副作用。您應該始終嘗試創建不改變任何全局設置的作業,因爲這總是會招致麻煩。
2

Hudson支持構建參數,這些構建參數是Hudson可用作生成步驟的環境變量的構建時變量(請參閱Hudson Parameterized Build wiki頁面)。在你的工作中,你可以有一個用戶輸入的參數CONFIG。 (要設置參數,在你工作的配置,選擇此版本是參數

然後,你基本上可以寫你在僞代碼在你構建步驟的開始編碼的。或者由於您有多個步驟,請將環境設置放在從現有構建腳本引用的文件中。 (根據您的shell,將腳本中設置的變量導出到父級環境有各種技巧。)將設置放入與現有構建腳本集成的文件中將使其更容易管理和測試(即可在外部進行測試的Hudson)以及給你一個簡單的方法來在本地調用你的腳本。

您也可以考慮將統一構建分離爲獨立作業,這些作業執行您描述的每個配置。儘管他們可能會引用一箇中心構建腳本,但您定義的CONFIG類型看起來應該是不同的操作,並且應該有獨立的工作。

+0

我給你一點,但這並沒有真正的幫助。你知道什麼技巧可以讓我改變調用過程的環境(java,運行Hudson)?我試過使用SETX以及調用.NET的SetEnvironmentVariable方法。兩者似乎都有效,但都不會影響調用進程的環境變量集。因此,我不同的構建步驟進行的後續調用不會看到更改。我真正想要的是像SetEnv插件,除了它必須允許一些結構化編程。 – roufamatic 2010-12-03 08:42:56

+0

所以你說,在第一個構建步驟中使用`setx`不起作用,並在第二個構建步驟中獲取變量? – 2010-12-03 12:25:59