Tomcat+;Hudson和测试Django应用程序

Tomcat+;Hudson和测试Django应用程序,django,testing,tomcat,hudson,Django,Testing,Tomcat,Hudson,我使用Hudson是为了测试Django应用程序。在初始测试中,我将使用war方法部署Hudson: java -jar hudson.war 这很有效。但是,我们希望在Tomcat上运行Hudson实例以获得稳定性和更好的安全灵活性 然而,现在运行Tomcat的Hudson似乎无法识别以前被认可的Python库,比如Virtualenv。下面是一个测试的输出: + bash ./config/testsuite/hudson-build.sh ./config/testsuite/hudso

我使用Hudson是为了测试Django应用程序。在初始测试中,我将使用war方法部署Hudson:

java -jar hudson.war
这很有效。但是,我们希望在Tomcat上运行Hudson实例以获得稳定性和更好的安全灵活性

然而,现在运行Tomcat的Hudson似乎无法识别以前被认可的Python库,比如Virtualenv。下面是一个测试的输出:

+ 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 +bash./config/testsuite/hudson-build.sh ./config/testsuite/hudson-build.sh:未找到第5行:virtualenv:命令 ./config/testsuite/hudson-build.sh:第6行:./ve/bin/activate:没有这样的文件或目录 ./config/testsuite/hudson-build.sh:未找到第7行:pip:命令 virtualenv和pip都是使用
sudo easy\u install
安装的,它们在哪里

virtualenv:/usr/local/bin/virtualenv

pip:/usr/local/bin/pip

Hudson现在在
tomcat6
用户下运行。如果我
su
进入tomcat6用户并检查virtualenv,它就会识别它。因此,我不明白为什么它在那里不认识它

我尝试从脚本中删除命令,并将其逐行放入Hudson中的shell execute框中,但仍然存在相同的问题


有什么想法吗?干杯。

您可以通过管理哈德逊-> 环境变量或每台机器通过机器->配置-> 环境变量(或使用Setenv插件的每个构建)。听起来像 您可能需要适当地设置路径和PYTHONPATH;至少是这样 简单的解决方案

编辑添加:我觉得下面的内容有点像是在咆哮,虽然不是真的针对你或你的处境。我认为您在这里已经有了正确的思维方式,因为您首先使用的是virtualenv和pip——您可以说,“我们希望我们的构建机器在
/usr/local
中安装virtualenv和pip”,然后就完成了。剩下的就拿吧

虽然路径的设置很简单,但是具有不同的构建 环境(或依赖于用户的环境)是一种集成“气味”。 如果您的构建依赖于特定的环境,那么您应该 验证环境或将其明确设置为生成的一部分。我把 在构建脚本中而不是在Hudson中进行环境设置

也许你唯一的假设是virtualenv和pip在这条路上(因为 这些是管理其他依赖项的好工具),但是 假设往往会增长并被遗忘(直到你需要建立一个新的 机器或用户)。我发现进行显式检查或引用 作为我定义的生成环境的一部分的显式可执行路径。它是 当您拥有一个明确定义的环境时,特别有用 旧版本或依赖于特定版本的生成工具

作为构建的一部分,我遇到了环境问题(特别是在Windows上) 使用cygwin),我将打印环境作为第一个构建步骤。(但我倾向于 有点偏执。)


我并不想说得那么说教,我只是想分享我的观点

只需补充Dave Bacher的评论:

如果在.profile中设置路径,则在运行tomcat时很可能不会执行该路径。.profile(或系统上的任何名称)仅在具有登录shell时执行。要设置必要的环境变量,必须使用不同的文件集。有时它们被称为.env,它们存在于全局和用户级别。在我的环境(AIX)中,用户级别的.env文件可以有不同的名称(名称在全局环境文件(例如/etc/environment)中的env变量中设置,或者在启动shell时通过参数设置)

免责声明:这是针对IBMAIXKSH的,但对于其他系统上的ksh应该是相同的


顺便说一句,我刚从HP网站上找到一个不错的。请注意,他们在谈到.profile文件的执行时提到了登录shell(!)。

听起来像是路径问题。根据您调用su tomcat6的方式,您可能会保留用户的路径。尝试在
su-tomcat6
下进行检查。是否安装了多个版本的Java?如果是这样的话,可能是类路径不同。谢谢。。很好的回答,一点也不说教:)干杯谢谢你的额外见解!