使用Jenkins或Phing重新启动Apache

5
我目前正在使用Phing和Jenkins自动化构建和部署我的CodeIgniter应用程序。 我遇到的一个问题是重新启动apache服务。我在Phing中尝试过,但权限不足。最好的方法是什么?
编辑:将jenkins添加到sudoer文件并执行服务httpd restart后,Jenkins会抛出“进程泄漏文件描述符”的问题。下面是通过Jenkins查看的Phing输出片段。它说解决方法是安装daemonize。不确定那是什么意思...
...Build_test > compress:

     [echo] YUI Compression started
     [echo] Replacing normal JS with compressed files.
     [echo] Replacing normal CSS with compressed files.
     [echo] chmoding assets
     [echo] YUI Compression ended

Build_test > pdepend:


Build_test > httpd_restart:

     [echo] Stopping httpd: [  OK  ]
     [echo] Starting httpd: [  OK  ]


BUILD FINISHED

Total time: 13.1424 seconds

Process leaked file descriptors. See http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build for more information
[JDepend] JDepend plugin is ready
[JDepend] Found 68 classes in 1 packages
Finished: SUCCESS

1
在Jenkins中生成新进程存在问题。我猜重启Apache也属于这个类别,因为会创建一个新的进程ID。您是否尝试将重启添加到后构建任务中?我只是想知道为什么在执行压缩和phpdepend任务后要重新启动Apache?您是否还重新构建了虚拟主机配置或其他内容? - t j
我正在使用APC。如果我不重启,有时会出现白屏死机的问题。如果您知道解决APC问题的方法,请告诉我 :) 但是他们是否有一个插件可以将Apache作为后构建任务重新启动? - lamp_scaler
我刚刚找到了这个插件,谢谢你的提示!但是如果我能在不重启Apache的情况下解决白屏问题,那就太好了! - lamp_scaler
我从未遇到过APC问题,但我会研究并尝试修复它,而不是通过Apache重启来绕过它。祝你好运! - t j
1个回答

5
如果您使用的是Linux系统,您可以使用sudo命令运行Phing,以允许其拥有足够的特权来重新启动apache。
sudo phing restartapache

假设restartapache是一个执行任务,调用Apache重启命令。例如:
<target name="restartapache" description="Restarts the web server">
    <exec command="/etc/init.d/apache2 restart" />
</target>  

为了避免sudo命令提示输入密码,您可以更新您正在运行构建的任何用户帐户的sudo权限(此示例演示如何关闭jenkins用户的sudo密码提示):
sudo visudo

然后添加以下内容:
Defaults:jenkins !requiretty,!lecture
jenkins ALL=NOPASSWD:/etc/init.d/apache2

以上内容已根据此答案进行了编辑以提高安全性,因此只允许Jenkins在没有密码的情况下重新启动apache,而不允许执行其他任何操作。


已经让它工作了,但有一些例外。请查看新信息的描述。 - lamp_scaler
2
授予Jenkins运行“任何东西”的全面权限是一个不好的主意。请参见此处的答案以改进您的解决方案。 - tylerl
1
谢谢。我已经使用您改进的解决方案更新了我的答案。 - t j

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接