Рестартиране на apache с Jenkins или Phing

В момента използвам Phing и Jenkins за автоматизиране на компилации и внедряване за моето приложение CodeIgniter. Един проблем, с който имам проблеми, е рестартирането на услугата Apache. Опитах във Phing, но няма достатъчно разрешения. Кой е най-добрият начин за рестартиране?

РЕДАКТИРАНЕ:

След добавяне на jenkins във файла sudoer и рестартиране на услугата httpd, Jenkins изхвърля: Процес на изтекли файлови дескриптори. По-долу е даден фрагмент от изхода на Phing чрез Jenkins. Пише, че заобиколно решение е да инсталирате 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

person lamp_scaler    schedule 01.08.2011    source източник
comment
Има проблем със създаването на нов процес в Jenkins. Предполагам, че рестартирането на apache попада в тази категория, тъй като ще бъде създаден нов идентификатор на процес. Опитвали ли сте да добавите рестартиране към задача след изграждане? Просто се чудя защо рестартирате Apache, след като така или иначе сте извършили компресия и phpdepend задачи? Възстановявате ли конфигурациите на vhost или нещо подобно?   -  person Tom Jowitt    schedule 01.08.2011
comment
Използвам APC. Ако не рестартирам, понякога получавам бял екран на смъртта. Ако знаете начин да заобиколите този проблем с APC, уведомете ме :) Но имат ли плъгин за рестартиране на apache като задача след компилация?   -  person lamp_scaler    schedule 01.08.2011
comment
Всъщност току-що намерих приставката, благодаря за съвета! Но ако мога да поправя проблема с белия екран на смъртта, без да рестартирам apache, това би било страхотно!   -  person lamp_scaler    schedule 01.08.2011
comment
Никога не съм срещал този проблем с APC, но бих го разгледал и бих се опитал да го поправя, вместо да кодирам около него с рестартиране на Apache. Късмет!   -  person Tom Jowitt    schedule 02.08.2011


Отговори (1)


Ако сте на Linux, можете да стартирате Phing с командата sudo, за да му предоставите достатъчно привилегии за рестартиране на apache.

sudo phing restartapache

Ако приемем, че restartapache е exec задача, която извиква командата за рестартиране на apache. например:

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

За да избегнете подканата за парола от командата sudo, можете да актуализирате своите разрешения за sudo за всеки потребителски акаунт, под който изпълнявате вашата компилация (този пример демонстрира изключване на подканата за парола sudo за потребителя на jenkins):

sudo visudo

След това добавете следните редове:

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

Горното е редактирано за подобряване на сигурността според този отговор, така че на Дженкинс да е разрешено само да рестартира apache без парола и нищо друго.

person Tom Jowitt    schedule 01.08.2011
comment
работи с някои изключения. Разгледайте описанието за новата информация. - person lamp_scaler; 01.08.2011
comment
Предоставянето на общо разрешение за jenkins да изпълнява всичко е лоша идея. Вижте този отговор тук за това как да подобрите решението си. - person tylerl; 01.01.2013
comment
Благодаря. Актуализирах отговора си с вашето подобрено решение. - person Tom Jowitt; 03.01.2013