2011-08-01 16 views
5

Attualmente sto usando Phing e Jenkins per automatizzare le build e la distribuzione per la mia app CodeIgniter. Un problema con cui sto avendo problemi è il riavvio del servizio Apache. Ho provato a Phing ma non ci sono abbastanza autorizzazioni. Qual è il modo migliore per riavviare?Riavviare apache con Jenkins o Phing

EDIT:

Dopo aver aggiunto Jenkins nel file sudoer e exec'ing il httpd riavvio del servizio, Jenkins getta: Processo trapelato descrittori di file. Di seguito è riportato uno snippet dell'output di Phing tramite Jenkins. Dice che una soluzione alternativa è installare daemonize. Non so che cosa significa ...

...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

C'è un problema con la generazione di nuovi processi in Jenkins. Immagino che il riavvio di Apache ricada in questa categoria quando verrà creato un nuovo ID di processo. Hai provato ad aggiungere il riavvio a un'attività post-build? Mi sto solo chiedendo perché stai riavviando Apache dopo aver fatto comunque le attività di compressione e phpdepend? Stai ricostruendo le configurazioni di vhost o qualcosa del genere? –

+0

Sto usando APC. Se non ricomincio, a volte ottengo una schermata bianca della morte. Se sai come risolvere questo problema con APC, fammi sapere :) Ma hanno un plug-in per riavviare Apache come attività post-compilazione? –

+0

In realtà ho appena trovato il plugin, grazie per il suggerimento! Ma se riesco a trovare una soluzione per lo schermo bianco del problema della morte senza riavviare Apache, sarebbe fantastico! –

risposta

5

Se siete su Linux è possibile eseguire Phing con il comando sudo per permettergli di privilegi sufficienti per riavviare apache.

sudo phing restartapache 

Supponendo che restartapache è un'attività exec che richiama il comando apache restart. Ad esempio:

<target name="restartapache" description="Restarts the web server"> 
    <exec command="/etc/init.d/apache2 restart" /> 
</target> 

Per evitare il comando sudo che richiede una password è possibile aggiornare le autorizzazioni sudo per qualsiasi account utente si esegue la build sotto (questo esempio dimostra spegnendo la richiesta di password sudo per l'utente Jenkins):

sudo visudo 

Quindi aggiungere le seguenti righe:

Defaults:jenkins !requiretty,!lecture 
jenkins ALL=NOPASSWD:/etc/init.d/apache2 

Quanto sopra è stato modificato per migliorare la sicurezza in base al this answer in modo che Jenkins sia autorizzato a riavviare Apache senza password e nient'altro.

+0

ha funzionato con alcune eccezioni. Dai un'occhiata alla descrizione per le nuove informazioni. –

+2

Concedere l'autorizzazione generale per jenkins per eseguire * qualsiasi cosa * è una cattiva idea. Vedi [questa risposta qui] (http://security.stackexchange.com/a/26267/2264) per come migliorare la tua soluzione. – tylerl

+1

Grazie. Ho aggiornato la mia risposta con la soluzione migliorata. –

Problemi correlati