2013-05-30 7 views
9

Tutti conoscono qualche buon articolo su come fare in modo che Jenkins giochi bene con Heroku?Tutorial su come spingere a Heroku via Jenkins

Che cosa voglio fare: 1) Desidera impostare un lavoro jenkins per eseguire il polling di un GitHub Repo privato quando si effettua il check-in al ramo sviluppatore. 2) Costruisci questo ramo e assicurati che tutto sia buono! 3) Push private GitHub Repo codebase a Heroku Repo. Così fa la build e la distribuzione su Heroku.

Ho visto pezzi e pezzi di articoli ma non riesco a ottenere il flusso completo per funzionare. Ho provato il plugin GitHub & plugin Heroku. POSSO ottenere il plugin github per effettuare il pull down e compilare ma non capisco come poi spingere su Heroku. Il plugin di Heroku mi consente di distribuire il file WAR, ma questo non fa apparire correttamente l'app. Quindi ho bisogno di spingere il codice base su Heroku Repo in modo che esegua la compilazione e la distribuzione.

Grazie, D

risposta

12

io uso Jenkins a spingere per Heroku per le nostre applicazioni. Non uso il plugin Heroku, mi piace il controllo che "Execute Shell" mi dà. Questa è una risposta piuttosto dettagliata, se mi manca qualcosa, assicurati di commentare.

1) Polling un Repo privato:

  • Il vostro lavoro deve essere impostato con l'opzione 'costruire quando un cambiamento è spinto a GitHub' nella sezione 'Costruire Trigger'.
  • su GitHub vai alla pagina del progetto, e fare clic sul menu Impostazioni nell'intestazione (deve avere accesso admin). Nella barra laterale sinistra di quella pagina fai clic su "Ganci di servizio". Questo ti porterà ad una lista di ganci che puoi scegliere. Seleziona "Jenkins (plugin GitHub)".
  • aggiungere l'URL di callback del server Jenkins (lasciare la pagina aperta per dopo). Qualcosa di simile:

    http://jenkins.example.com/github-webhook/

  • è possibile verificare la richiamata con l'aggiunta di un 'registro Recorder' dal Jenkins, andando a Jenkins | Gestisci Jenkins | Registro di sistema. Fare clic su 'Aggiungi nuovo registratore'
  • Enter 'gancio test', Set Logger per 'com.cloudbees.jenkins.GitHubWebHook', Livello di registro per 'All'
  • Torna GitHub e cliccare su 'Hook Test' , puoi quindi vedere il registro di callback per confermare che il tuo hook funzioni.

2) Costruire il ramo. Essere sicuri di avere tutte le configurazioni set GitHub, come il callback attiverà il lavoro solo se queste impostazioni vengono effettuate.

  • Nella sezione "Gestione codice sorgente", selezionare l'opzione "Git" e inserire i dettagli del repository, ad es. '[email protected]: ...'
  • Nel 'Build Trigger', seleziona 'Build quando un cambiamento è spinto a GitHub'

3) Push to Heroku. Alcune cose da considerare qui.

  • È necessario assicurarsi che nel proprio lavoro sia stato aggiunto il repository remoto Heroku. Quando si crea un nuovo lavoro si tratta di un'azione una volta, e non ha bisogno di essere fatto per ogni generazione.Per esempio:
heroku git:remote -a myApp 
git remote add heroku [email protected]:myApp.git 

creare un eseguire lo script shell con il solo di cui sopra, per l'utilizzo solo sul tuo primo build.

  • Se si dispone di Ping target (nuova reliquia), disabilitarli durante l'implementazione per evitare false notifiche che l'app non funziona.
curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/disable -X POST -H "X-Api-Key: APIKEY" 

Non dimenticare di riaccenderlo dopo:

curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/enable -X POST -H "X-Api-Key: APIKEY" 
  • fare lo stesso per modalità di manutenzione su App
heroku maintenance:on --app myApp 
heroku maintenance:off --app myApp 

Mettendo questo insieme, un tipico script deploy su Jenkins può apparire come segue:

#one off to ensure heroku remote is added to repo 
heroku git:remote -a myApp 
git remote add heroku [email protected]:myApp.git 
#disbales 
curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/disable -X POST -H "X-Api-Key: APIKEY" 
heroku maintenance:on --app myApp 
#push to heroku 
git push --force heroku master 
heroku run rake db:migrate --app myApp 
#enables 
curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/enable -X POST -H "X-Api-Key: APIKEY" 
heroku maintenance:off --app myApp 
+0

Grazie per questa risposta, è utile. Ho riscontrato un problema con questa soluzione a causa dei telecomandi multipli. GIT_BRANCH ora si risolve in heroku/master invece di origine/master e ho notato che l'app ora 'git pulls 'da entrambi i telecomandi. Non sono il tipo di conseguenze che questo può avere, ma non mi sembra una buona idea. Qualche idea? – DrewVS

+0

prova 'git fetch', quindi ' git checkout origine/master' – blotto

10

In alternativa utilizzando l'API Heroku come sopra per la distribuzione, è può semplicemente spingere il tuo codice su un repository Git remoto (es quello definito da Heroku per la tua app) come azione post-compilazione. Il tuo lavoro definirà quindi due repository Git: uno è il tuo repository Github e un altro è quello Heroku.

enter image description here

Dare il Heroku repository un nome, come ad esempio 'Heroku' e nella sezione di post-generazione Azioni, utilizzare un editore Git. Assicurati di selezionare il nome heroku nel campo Nome remoto target. enter image description here

A seconda di come hai impostato il trigger Costruire sul vostro progetto Github, quando una build completa, Jenkins spingerà l'istantanea risultante al repository Heroku, con un conseguente distribuzione.

+3

E l'autenticazione? –

+0

L'autenticazione @DominicTobias viene eseguita aggiungendo la chiave ssh del server jenkins a heroku. – Putna

+0

@Putna grazie, ho finito per scendere questa rotta (spingendo la cartella di build in heroku) e usando la chiave ssh su jenkins –

1

In primo luogo si dovrebbe passare il progetto per usare le chiavi ssh per l'autenticazione e aggiungere lo ssh-chiave pubblica al tuo account Heroku:

heroku git:remote --ssh-git 
heroku keys:add 

Con

git remote -v 
heroku [email protected]:your-project.git (fetch) 
heroku [email protected]:your-project.git (push) 

si può capire l'URL da utilizzare come URL di repository nella configurazione di Jenkins. Quindi segui le istruzioni fornite nella risposta di @Andy Glover (vedi anche http://thediscoblog.com/blog/2014/01/24/continuous-delivery-for-heroku-with-jenkins/) per configurare il tuo Jenkins.

Infine, per consentire a Jenkins di inviare al repository git di Heroku, è necessario chiedere all'amministratore Jenkins di fornire la chiave pubblica ssh dell'utente root/jenkins che esegue il lavoro Jenkins. Aggiungi questa chiave pubblica tramite il tuo Heroku dashboard al tuo account Heroku. Se il tuo lavoro di costruzione ha esito positivo, Jenkins sarà quindi in grado di passare al tuo account Heroku, determinando una distribuzione.

Problemi correlati