2011-06-29 17 views
8

Mi proyecto tiene una canalización de varios pasos que incluye algunos pasos como Rastreo, PNL, etc., pero me referiré a ellos simplemente como Paso 1, Paso 2, etc. Además, quiero poder para implementar en diferentes entornos (dev, prod, etc.).Ejecución de tareas de Capistrano solo para determinados roles

Me imagino que usaré el componente de varias etapas para Capistrano para implementar en los diferentes entornos (por ejemplo, despliegues de desarrollo de cap vs despliegue de prod prod).

También parece tener un sentido intuitivo utilizar roles para cada paso de canalización. Sin embargo, cada paso se ejecuta con bastante independencia del resto de la canalización, por lo que cada paso puede reiniciarse/implementarse independientemente de los otros pasos. No parece que Capistrano admita explícitamente ejecutar tareas solo para un rol específico. ¿Cuál es una buena manera de hacer esto?

¿Es la mejor manera de hacer estas tareas de definición específicamente para cada función? ¿Qué pasa si hay algunas tareas comunes entre los roles? Tal vez los métodos de ayuda es la respuesta allí?

Respuesta

1

Comprobar esta discusión Creating a Capistrano task that performs different tasks based on role

task :stop_memcached, :roles => :memcache do 
... 
end 
+0

No es exactamente lo que estoy buscando. Por ejemplo, si tuviera una tarea como: ' tarea: hacer clear_logs plazo "rm -f /tmp/blah.log" final ' como parte de un despliegue, me gustaría ejecutarlo en toda mi máquinas si estuviera implementando todos los Pasos en mi canalización. Pero si solo estoy implementando el Paso 2 de la canalización, solo querría borrar los registros en todas las máquinas que tienen el rol de Paso 2. El problema con las funciones que estoy encontrando es que son buenas para especificar en qué máquinas ejecutar las tareas, pero parece que no se puede especificar si realmente las ejecutan o no para una implementación en particular. – JZC

3

No estoy seguro es exactamente lo que está buscando, pero cuando quiero hacer algo sólo para una función particular, que utiliza la cáscara de Capistrano. Por ejemplo, digamos que desea implementar, pero sólo a mis servidores de aplicaciones, podría hacer lo siguiente:

cap production shell 
cap>with app 
cap>!deploy #or any other cap task you have 

Puede también alcance por la máquina, si quieres. Una vez más:

cap production shell 
cap>on <machine name or ip> 
cap>!deploy #or any other cap task you have 

creo que sirve,

de Scott

1

No está seguro de qué versión se añadió la característica, pero la tapa se verá en los papeles variable de entorno para determinar qué funciones se ejecute de manera

$ ROLES=db cap deploy 
2

Si desea ejecutar una tarea capistrano desde la línea de comandos, pero solo para un subconjunto de roles definidos, puede usar el parámetro ROLES.

El siguiente comando se ejecuta la tarea category:task sólo para papel was:

cap ROLES=was category:task 

El parámetro ROLES tiene múltiples valores, lo que puede añadir más funciones separadas por una coma:

cap ROLES=was,db category:task 

Para más detalles , puede consultar la documentación invoke

Cuestiones relacionadas