首先,触发是什么意思?
在 Jenkins 中,您可以通过多种方式触发构建。您可以通过 URL 远程执行构建,可以在特定时间运行构建,或者在存储库中检测到更改时运行构建。你是如何触发构建的。
另外,Jenkins 是如何得到这个build.xml 和这个Test.sh 的。您意识到 Jenkins 可以运行 Test.sh 本身而无需构建 Ant 脚本来执行此操作?此外,您可以让 Jenkins 为您结帐。这是使用 Jenkins 的重要原因之一。
您应该以 root 身份运行 Jenkins 吗?绝对不。 Jenkins 应该以自己的用户身份运行。授予 Jenkins 根访问权限可能会导致意想不到的麻烦。想象一下,如果构建脚本包含rm -rf /。以自己的用户身份运行 Jenkins,并授予该特定用户只读对您的存储库的访问权限(除非您让 Jenkins 进行提交或制作标签)。
为什么会出现这些错误? Jenkins 什么时候会收到这些错误?当你进入詹金斯本身?当你触发构建?当 Jenkins 尝试从您的版本控制系统中检出代码时?如果是最后一个,可能是 Jenkins 没有权限。当您设置作业并进行结帐时,您需要确保设置了结帐凭据。
你能多解释一下这个工作是如何设置的吗?为什么你有一个作为 shell 脚本的文件,它被放入 build.xml 中,告诉你要签出哪些目录?为什么不让詹金斯自己处理呢?你想建立什么?这是一个 Java 应用程序吗? (您正在使用build.xml)。
附录
如何在不使用构建文件的情况下运行 shell 脚本你能给我一个例子吗?我想做的是,我们有一个 Web 应用程序,它需要我们的 SVN 存储库中的主干源、sql 文件、安装路径和一些其他文件。现在,shell 脚本未经授权检查所有必要的文件,并在 /var/www 文件夹中创建我们应用程序的实例。现在我要做的是使用 jenkins 我必须在每天晚上 7 点调用这个 build.xml 文件(由 shell 脚本组成),以便在完成后我们可以在该实例上运行自动化脚本。 - /
我感觉你不明白 Jenkins 的工作原理……
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 任务来像您一样进行安装,但可能有更好的工具可用。