I'm currently using Phing and Jenkins to automate builds and deployment for my CodeIgniter app. One problem I'm having trouble with is restarting the apache service. I tried in Phing but there isn't enough permissions. What is the best way to restart?
EDIT:
After adding jenkins into the sudoer file and exec'ing the service httpd restart, Jenkins throws: Process leaked file descriptors. Below is a snippet of the Phing output via Jenkins. It says a workaround is to install daemonize. Not sure what that means...
...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
Method 1: Restart Apache Server Using Systemctl Command The service should restart. The restart command can take several moments to complete, depending on the complexity of your server configuration. If you're running a large or complex server configuration, this can cause disruptions for users who rely on the server.
Apache needs to be told to re-read its configuration file before it will take account of changes, but it is not necessary to completely stop and restart our web server after each change. A rather faster mechanism is to cause it to reread its file to note changes.
If you're on Linux you can run Phing with the sudo command to allow it enough privileges to restart apache.
sudo phing restartapache
Assuming that restartapache is an exec task that calls the apache restart command. Eg:
<target name="restartapache" description="Restarts the web server">
<exec command="/etc/init.d/apache2 restart" />
</target>
To avoid the sudo command prompting for a password you can update your sudo permissions for whatever user account you are running your build under (this example demonstrates turning off the sudo password prompt for the jenkins user):
sudo visudo
Then add the following lines:
Defaults:jenkins !requiretty,!lecture
jenkins ALL=NOPASSWD:/etc/init.d/apache2
The above has been edited to improve security according to this answer so that Jenkins is only allowed to restart apache without a password and nothing else.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With