Jenkins无法执行build.xml文件。 jenkins应该由root用户运行吗?

时间:2014-04-18 15:51:23

标签: shell svn ant jenkins hudson

我有一个shell脚本Test.sh。我创建了一个ant build.xml文件来运行这个shell脚本。

在詹金斯,我正在触发这个build.xmlTest.sh包含检查源代码的svn存储库URL。

当我在Jenkins中构建此作业时,它显示错误,例如密码为'jenkins':身份验证领域:和“授权失败:无法对服务器进行身份验证:拒绝基本挑战“

为什么会出现这种情况?当我从我的机器运行build.xml文件svn checkout工作正常,没有任何身份验证。

如果触发build.xml,我应该如何配置Jenkins以类似的方式执行。我们应该运行jenkins以root身份运行吗?

2 个答案:

答案 0 :(得分:2)

首先,触发是什么意思?

在Jenkins中,您可以通过多种方式触发构建。您可以通过URL远程执行构建,您可以在特定时间运行构建,也可以在存储库中检测到更改时运行构建。你是如何触发构建的。

此外,Jenkins如何获得此build.xmlTest.sh。您意识到Jenkins可以运行Test.sh本身而无需构建Ant脚本来执行此操作吗?此外,您可以让詹金斯为您结账。这是使用Jenkins的一个重要原因。

你应该以root身份运行Jenkins吗?绝对不。 Jenkins应该作为自己的用户运行。授予Jenkins root权限可能会导致意外的麻烦。想象一下,如果构建脚本包含rm -rf /。将Jenkins作为自己的用户运行,并将该特定用户只读访问您的存储库(除非您让Jenkins提交或生成标记)。

为什么会收到这些错误?詹金斯什么时候得到这些错误?当你进入詹金斯本身?当你触发构建?当Jenkins尝试从您的版本控制系统中签出代码时?如果是最后一个,可能是Jenkins没有权限。当您设置作业并进行结帐时,您需要确保设置了结帐凭证。

你能给我一些解释如何安排这项工作吗?为什么你有一个shell脚本的文件被放入build.xml,告诉你要检查哪些目录?为什么不让Jenkins自己处理呢?你想要建造什么?这是一个Java应用程序吗? (你正在使用build.xml)。


附录

  

如何在不使用构建文件的情况下运行shell脚本,你能举个例子吗?我们要做的是,我们有一个Web应用程序,它需要中继源,sql文件,安装路径以及SVN存储库中的一些其他文件。现在shell脚本在未经授权的情况下检出所有必需的文件,并在/ var / www文件夹中创建我们的应用程序实例。现在我要做的是使用jenkins我必须每天早上7点调用这个build.xml文件(由shell脚本组成),以便在完成后我们可以在该实例上运行自动化脚本。 - /

我有一种感觉,你不明白詹金斯是如何工作的......

Jenkins可以运行各种各样的任务,而不仅仅是Ant。您可以添加构建步骤并指定所需内容。其中一个选择是运行shell脚本。

Jenkins是一个持续构建的引擎。它不是安装程序,也不是crontab的替代品。

Jenkins在其工作区域内构建了一个应用程序。您可以根据特定时间,按需或在项目中发生变化时进行构建。 Jenkins将构建,运行测试,制作文档以及存储工件以进行部署。

我使用promoted build plugin来实际部署工件。您也可以使用FTP和SCP插件将文件复制到部署区域,作为构建过程的一部分。

我会提出一些建议:

  • 使用svn:externals属性在单个Subversion项目下获取构建的所有不同部分。单个结账将获得部署所需的一切。请注意如何指定各种部分。使用修订号或标签冻结存储库的各个部分,或使用相对标记,因此所有内容都在一个分支上。

  • 如果某些内容需要root访问权限,请使用sudo。您可以将sudo设置为不需要特定用户的密码,并限制可以root身份运行的命令。那么,/var/www是否拥有root权限?它不应该。它应该由运行httd的进程拥有,该进程也不应该是root用户。

  • 有些网站的网页目录区域是Subversion工作目录。 svn update将安装他们需要的东西。

顺便说一句,您可以设置Jenkins任务来执行您正在进行的安装,但可能有更好的工具可用。

答案 1 :(得分:0)

我同意David的上述评论,它更容易直接从Jenkins作业运行shell脚本,而不是在ant中创建exec任务。

无论如何,您所指的错误不是由Jenkins引起的,它来自SVN服务器。您的本地计算机已保存svn身份验证,因此您不必在通过脚本/直接访问SVN时提供凭据。虽然运行build.xml(通过Jenkins)的机器没有保存SVN身份验证,但您必须提及凭据。

确保将SVN用户身份验证添加到test.sh脚本中。 例如:svn co svn:// myrepo / dev / trunk --username jenkins --password PASSWORD

注意:您不必每次都添加用户身份验证,只需执行一次,机器就会保存。