Attualmente sto configurando un server di build nel nostro ufficio e mi chiedevo quale fosse la procedura migliore per questo. So che ogni situazione richiede un approccio diverso e ci sono un milione di modi per raggiungere lo stesso obiettivo, ma dal momento che sono un nuovo arrivato a Jenkins e il concetto di server di sviluppo in generale, mi chiedevo se stavo facendo questo 'giusto '.Quali sono le best practice di Jenkins con la creazione con Grunt e l'implementazione con Capistrano?
La nostra azienda si concentra sulla costruzione di siti Web per vari clienti con varie piattaforme come WordPress o Magento. Ora ho la seguente configurazione:
Spingiamo le modifiche su un master o ramo di gestione temporanea in Git. Jenkins sondaggi questi rami ed effettua le seguenti quando viene rilevato un cambiamento:
- Estrarre il repository da Git (
master
in questo esempio) - Cassa un ramo chiamato
build-master
- reimposta questo ramo per
origin/master
- Fa un
npm install
se viene trovato unpackage.json
. - Viene trovato un
grunt build
se viene trovato unoGruntfile.js
. - (qui c'è spazio per altre cose come i test PHPUnit o casperJS)
- commit delle modifiche e lo spinge di nuovo a
origin/build-master
. - Esegue un
cap build-master deploy
per consentire a Capistrano di gestire la distribuzione sul server remoto.
Ora mi chiedevo se questo è un modo "corretto" di utilizzare un server di build. Mi imbatto in alcuni problemi logici. Ad esempio:
Software fornitore per esempio. Quando ho diverse librerie JS con Bower ad esempio (che si trovano in una gilda ignorata da G23 js/vendor
), posso concatenarle e renderle uguali in un file JS minificato in modo che si impegnino nello spazio build-master
-repository (per Capistrano). Ma quando ho librerie PHP (con Composer per esempio) non sono sicuro di come gestirlo. Questi si trovano in una cella di tipo ignorato php/vendor
, ma devono essere inclusi nello build-master
-branch in modo che vengano distribuiti sul server live. Attualmente lo sto facendo aggiungendo un .gitignore.build
al mio repository, che include la cartella php/vendor
, e sovrascrivi lo esistente .gitignore
con questo in precedenza prima di eseguire il commit e premere su origin/build-master
.
E/o:
file compilati. Quando non voglio includere alcuni file (come i file CSS generati da SASS per esempio), li inserisco nello .gitignore
. Ma ancora una volta, quando Capistrano lo distribuirà, voglio che il file CSS compilato, concentrato e minificato sia nel mio repository, altrimenti non è inserito nel mio server di produzione.
Qualcuno può dirmi se sto costruendo e distribuendo nel modo in cui dovrebbe essere? O sono davvero troppo complicato qui per me? Sono davvero interessato a come le persone con maggiore esperienza con questo stanno utilizzando Jenkins, Grunt, Bower, Composer, Capistrano, ecc. Nel loro processo di compilazione.
Una cosa su cui mi sono interrogato sta eseguendo i binari. Visto che lo fai, mi chiedo se lavori per assicurarti che il checkout di uno sviluppatore rimanga snello, senza i binari? – AnneTheAgile