2010-12-07 54 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文件的执行情况。