2010-09-02 12 views
0

我有一個運行Maven目標的Hudson作業。在執行這個maven目標之前,我已經添加了一個在構建開始之前運行的步驟,它是一個shell腳本,它獲取我想在「目標和選項」字段中使用的版本號。使用使用預編譯shell命令獲得的變量爲Hudson中的Maven構建設置選項

在我的作業配置

所以,在構建環境我已經檢查了配置M2額外的構建步驟盒和構建之前增加了一個shell腳本。該腳本是這樣的:

export RELEASE={command to extract release version} 
echo $RELEASE 

然後根據構建節中,我指出我的「根POM」。在目標和選項我再想能夠做這樣的事情:

-Dbuild.release.version=${RELEASE} deploy 

build.release.version是在POM中引用的行家屬性。然而,因爲shell似乎沒有使其變量全局化,所以它不起作用。有任何想法嗎?

我唯一擁有的就是安裝Envfile插件並獲取shell腳本將RELEASE屬性寫入文件,然後讓插件讀取該文件,但運行一切的順序可能會導致問題而且似乎必須有更簡單的方法...在那裏?

在此先感謝。

回答

0

當你說它不起作用時,你的意思是你的RELEASE變量沒有傳遞給maven命令?我相信問題在於,默認情況下,shell腳本的每一行都是單獨執行的,因此環境變量會丟失。

如果你想整個shell腳本來執行,如果它是一個腳本文件,使第一線:

#!/bin/sh 

我覺得這是在旁邊的shell腳本生成步驟的幫助信息中描述(和如果我錯了,那是尋找正確語法的好地方)。

+0

您好,感謝您的答覆 - 我試過了,但得到的錯誤: 大廈主 [工作區] $/bin/sh的C:\ DOCUME〜1 \ USR \ LOCALS〜1 \ TEMP \ 1 \ hudson5860957589544318456 .sh 致命錯誤:命令執行失敗 java.io.IOException:無法運行程序「/ bin/sh」(在目錄「E:\ hudson \ jobs \ MyJob \ workspace」中):CreateProcess error = 3,系統找不到指定的路徑 \t在java.lang.ProcessBuilder.start(ProcessBuilder.java:459) \t \t ... 引起:產生java.io.IOException:CreateProcess的錯誤= 3,系統無法找到路徑指定 \t at java.lang.ProcessImpl.create(Native Method) \t ... 在窗口框上運行 – 2010-09-03 10:44:56

+0

想我現在明白了 - http://hudson.361315.n4.nabble.com/sh-in- cygwin-td368129.html – 2010-09-03 13:41:48

+0

是的,仍然無法正常工作。使用Hudson版本1.371 – 2010-09-03 14:11:53

1

我最近也想做同樣的事情,但是AFAIK無法將預構建shell的值導出到作業環境中。如果有這個Hudson插件,我錯過了它。

但是,有什麼工作是類似於您所建議的設置:讓預構建shell腳本將所需值寫入工作區中的屬性文件,然後使用觸發器另一個實際完成工作的工作(在你的情況下,調用Maven工作)。該插件可以配置爲讀取它從屬性文件傳遞的參數。所以第一個作業只有shell腳本和構建後觸發器,而第二個人做了實際的工作,具有可用的環境變量的正確參數。

shell腳本的總體思路:

echo "foo=bar 
baz=`somecmd`" > build.properties 

併爲您的目標和方案,是這樣的:

-Dbuild.release.version=${foo} deploy 

當然,這是不優雅的一個可能想不過果然奏效對我們來說是好的,因爲我們的構建被分解成幾個作業,我們可以重新使用第一個作業觸發的其他作業(即用不同的參數調用它們)。

相關問題