2010-12-07 98 views
2

我使用Hudson來測試我們的Django應用程序的預期目的。在最初的測試中,我會使用戰爭方法部署哈德森:Tomcat + Hudson和測試Django應用程序

java -jar hudson.war 

這很好。但是,我們希望在Tomcat上運行Hudson實例,以獲得更高的安全性和更好的安全性。

但是,現在運行Hudson的Tomcat似乎無法識別像Virtualenv這樣以前認可的Python庫。下面是一個測試的輸出:被同時安裝

 
+ bash ./config/testsuite/hudson-build.sh 
./config/testsuite/hudson-build.sh: line 5: virtualenv: command not found 
./config/testsuite/hudson-build.sh: line 6: ./ve/bin/activate: No such file or directory 
./config/testsuite/hudson-build.sh: line 7: pip: command not found 

的virtualenv和點子使用sudo easy_install,他們在哪裏?

的virtualenv:在/ usr/local/bin目錄/ virtualenv中

PIP:在/ usr/local/bin目錄/ PIP

哈德森現在下tomcat6用戶運行。如果我將su放入tomcat6用戶並檢查virtualenv,它會識別它。因此,我不知道爲什麼它不承認它。

我嘗試從腳本中刪除命令,並將其逐行放入Hudson中的shell執行框中,但仍然是同一個問題。

任何想法?乾杯。

+1

聽起來像一個PATH問題。根據你如何調用`su tomcat6`,你可能會保留你的用戶的路徑。嘗試在`su - tomcat6`下檢查。 – 2010-12-07 20:34:34

+0

您是否安裝了多個Java版本?如果是這樣,則可能是類路徑不相同的情況。 – Bernard 2010-12-07 22:04:58

回答

1

您可以通過全局配置環境變量管理哈德森 - 通過機> 環境變量或每機 - >配置 - > 環境變量(或每建立一個與SETENV插件)。聽起來像 您可能需要適當地設置PATH和PYTHONPATH;至少這就是 簡單的解決方案。

編輯添加我覺得好像有點咆哮,雖然不是真的針對你或你的情況。我認爲你已經有了正確的心態,因爲你首先使用了virtualenv和pip - 並且你說「我們希望我們的構建機器具有安裝在/usr/local中的virtualenv和pip」並不合理,完成它。其餘的,你會...

雖然PATH是一個簡單的事情來設置,具有不同的構建 環境(或依賴於用戶的環境)是一個集成「氣味」。 如果您依賴於構建中的特定環境,那麼您應該或者 驗證環境或將其明確設置爲構建的一部分。我將 環境設置在構建腳本中,而不是在Hudson中。

也許你唯一的假設是的virtualenv和點子都在PATH(因爲 這些都是用於管理其他依賴良好的工具),但建 假設往往成長和被​​人遺忘(直到你需要建立一個新的 機器或用戶)。我發現有明確的檢查是有用的,或者參考作爲我定義的編譯環境一部分的顯式可執行文件路徑。如果您有遺留版本,或者您依賴特定版本的構建工具,則特別有用於具有明確定義的環境。

作爲構建環境問題的一部分(尤其是使用cygwin的Windows ),我將環境作爲第一個構建步驟進行打印。 (但我傾向於 是 有點偏執 積極主動。)

我不是故意說這麼說,我只是想分享我的觀點。

+0

謝謝..很好的答案,根本不講道理:)乾杯 – Bartek 2010-12-10 01:37:17

1

我想補充戴夫巴切爾的評論:

如果您在.profile裏面設置你的路徑,它是最有可能運行Tomcat時不執行。 .profile(或系統上的任何名稱)只有在擁有登錄shell時纔會執行。要設置必要的環境變量,您必須使用一組不同的文件。有時它們被稱爲.env,它們存在於全局和用戶級別。在我的環境(AIX)中,用戶級別的.env文件可以具有不同的名稱(在啓動shell時,在全局環境文件(例如/ etc/environment)中或通過參數在env變量中設置名稱)。

聲明:這適用於IBM AIX ksh,但對於其他系統上的ksh應該相同。

P.S.我剛剛從惠普網站上找到了一個不錯的explanation for .profile and .env。請注意,他們談論登錄shell(!)時,他們談論了.profile文件的執行情況。