¿Cuáles son las mejores prácticas de Jenkins para build con Grunt y desplegar con Capistrano?

Actualmente estoy configurando un server de compilation en nuestra oficina y me pregunto cuál es la mejor práctica para esto. Sé que cada situación requiere un enfoque diferente y hay un millón de maneras de lograr el mismo objective, pero dado que soy un recién llegado a Jenkins y el concepto de serveres de compilation en general, me preguntaba si lo estoy haciendo bien. '.

Nuestra compañía se enfoca en crear sitios web para varios clientes con varias plataforms como WordPress o Magento. Ahora tengo la siguiente configuration:

Impulsamos nuestros cambios a una twig maestra o de etapas en Git. Jenkins sondea estas twigs y hace lo siguiente cuando se detecta un cambio:

  • Extraiga el repository de Git ( master en este ejemplo)
  • Pagar una twig llamada build-master
  • Restablece esta twig a origin/master
  • ¿ npm install una npm install si se encuentra un package.json ?
  • ¿Se grunt build un grunt build si se encuentra un Gruntfile.js ?
  • (Aquí hay espacio para otras cosas como las testings phpunit o casperJS)
  • Confirma los cambios y los devuelve a origin/build-master .
  • Ejecuta un cap build-master deploy para permitir que Capistrano maneje la implementación en el server remoto.

Ahora me preguntaba si esta es una forma "correcta" de usar un server de compilation. Me encuentro con algunos problemas lógicos. Me gusta:

Proveedor de software, por ejemplo. Cuando tengo varias bibliotecas JS con Bower, por ejemplo (que están ubicadas en una carpeta js/vendor ignorada js/vendor git), puedo concatenarlas y convertirlas en un file JS minificado para que se comprometan en el repository build-master (para Capistrano). Pero cuando tengo bibliotecas PHP (con Composer por ejemplo) no estoy seguro de cómo lidiar con esto. Se encuentran en una carpeta php/vendor ignorada php/vendor git, pero deben includese en la build-master básica de compilation para que se implemente en el server activo. Actualmente estoy haciendo esto agregando un .gitignore.build a mi repository, que incluye el php/vendor -folder, y sobrescribo el .gitignore existente con este antes antes de enviar y .gitignore a origin/build-master .

Y / o:

Archivos comstackdos . Cuando no quiero include algunos files (como los files CSS generados desde SASS, por ejemplo), los pongo en .gitignore . Pero, una vez más, cuando Capistrano vaya a desplegarlo, quiero que el file CSS comstackdo, concatenado y minificado esté en mi repository, de lo contrario no se colocará en mi server de producción.

¿Alguien puede decirme si estoy construyendo y desplegando de la manera que debería ser? ¿O lo estoy complicando demasiado aquí para mí? Estoy realmente interesado en cómo las personas con más experiencia en esto utilizan Jenkins, Grunt, Bower, Composer, Capistrano, etc. en su process de construcción.

Estoy buscando la misma respuesta exacta. Estoy en la misma situación y me pregunto cómo se podría hacer esto con la mejor configuration de inicio.
Dado que se está preguntando sobre el uso de grunt para la implementación, existe este tutorial que puede ser útil para usted, espero que esto le brinde ideas iniciales: https://weluse.de/blog/continuous-deployment-with-yeoman- y-jenkins.html
Además, me interesa si tiene algún comentario de su proyecto actual.