2013-05-30 9 views
9

Czy ktoś zna jakieś dobre artykuły o tym, jak Jenkins mógłby dobrze grać z Heroku?Samouczek na temat przesuwania do Heroku przez Jenkinsa

Co chcę zrobić: 1) Chcesz skonfigurować zadanie Jnkins do odpytywania prywatnego GitHub Repo, gdy checkin są wykonywane w gałęzi deweloperskiej. 2) Zbuduj tę gałąź i upewnij się, że wszystko jest dobrze! 3) Przekaż prywatną bazę GitHub Repo do Heroku Repo. Tak więc buduje i wdraża na Heroku.

Widziałem fragmenty artykułów, ale nie można uzyskać pełnego przepływu do pracy. Próbowałem wtyczki GitHub & Heroku. Mogę pobrać wtyczkę github do ściągnięcia i zbudowania, ale nie rozumiem, jak to zrobić, by pchać do Heroku. Wtyczka Heroku pozwala mi instalować plik WAR, ale to nie wywołuje poprawnie aplikacji. Muszę więc popchnąć kod źródłowy do Heroku Repo, aby skompilował i wdrożył.

Dzięki, D

Odpowiedz

12

używam Jenkins pchnąć do Heroku dla naszych aplikacji. Nie używam wtyczki Heroku, podoba mi się kontrola, którą daje mi "Execute Shell". Jest to dość szczegółowa odpowiedź, jeśli coś przeoczyłem, koniecznie napisz komentarz.

1) Polling prywatnej Repo:

  • Twoja praca należy skonfigurować z opcją „Build, gdy zmiana jest zepchnięte na GitHub” w sekcji 'Build wyzwala.
  • na GitHub przejdź do strony projektu i kliknij menu Ustawienia w nagłówku (musi mieć dostęp administratora). Na lewym pasku bocznym tej strony kliknij "Haki serwisowe". To przeniesie Cię do listy haczyków, które możesz wybrać. Wybierz "Jenkins (wtyczka GitHub)".
  • Dodaj adres zwrotny swojego serwera jenkins (pozostaw tę stronę otwartą na później). Coś jak:

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

  • można przetestować zwrotnego dodając 'log Recorder' z Jenkins, przechodząc do Jenkins | Manage Jenkins | System Log. Kliknij przycisk 'Dodaj nowy dziennik Recorder'
  • 'Enter', hak testowy zestaw Logger do 'com.cloudbees.jenkins.GitHubWebHook' Set Log Level na 'All'
  • Wróć do GitHub, i kliknij 'test' Hook , możesz zobaczyć dziennik wywołania zwrotnego, aby potwierdzić, że twój hak działa.

2) Zbuduj gałąź. Upewnij się, że wszystkie konfiguracje GitHub są ustawione, ponieważ wywołanie zwrotne wyzwala zadanie tylko wtedy, gdy te ustawienia zostaną wykonane.

  • W sekcji "Zarządzanie kodami źródłowymi" wybierz opcję "Git" i wpisz szczegóły swojego repozytorium, np. '[email protected]: ...'
  • W '' Budowanie wyzwala sekcji Wybierz 'Build, gdy zmiana jest popychany do GitHub'

3) Prześlij na Heroku. Kilka rzeczy do rozważenia tutaj.

  • Musisz upewnić się, że do twojej pracy dodano ponowne zdarzenie Heroku. Podczas tworzenia nowego zadania jest to JEDNA akcja czasu i nie musi być wykonywana dla każdej kompilacji.Na przykład:
heroku git:remote -a myApp 
git remote add heroku [email protected]:myApp.git 

utworzyć Wykonaj skrypt powłoki z dopiero powyżej, do stosowania tylko na pierwszej kompilacji.

  • Jeśli masz cele ping (nowy relikt), wyłącz je podczas wdrażania, aby uniknąć fałszywych powiadomień, że aplikacja jest wyłączona.
curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/disable -X POST -H "X-Api-Key: APIKEY" 

Nie zapomnij, aby włączyć go ponownie po:

curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/enable -X POST -H "X-Api-Key: APIKEY" 
  • Zrób to samo na tryb serwisowy na App
heroku maintenance:on --app myApp 
heroku maintenance:off --app myApp 

Kładzenie to razem, typowy scenariusz rozmieszczenia na Jenkins może wyglądać następująco:

#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

Dzięki za tę odpowiedź, jest to pomocne. Wystąpił problem z tym rozwiązaniem z powodu wielu pilotów. GIT_BRANCH teraz przechodzi na heroku/master zamiast na origin/master i zauważyłem, że teraz aplikacja 'git pulls' pochodzi z obu pilotów. Nie wiem, jakie to może mieć konsekwencje, ale nie wydaje się to dobrym pomysłem. Jakieś pomysły? – DrewVS

+0

spróbuj 'git fetch' następnie ' git checkout origin/master' – blotto

10

Jako alternatywę dla korzystania z interfejsu API Heroku jak wskazano powyżej, aby wdrożyć, ty może po prostu przekazać twój kod do zdalnego repozytorium Git (np ten, który Heroku zdefiniował dla twojej aplikacji) jako Akcja Post-Build. Twoja praca definiuje więc dwa repozytoria Git - jeden z nich to repozytorium Githuba, a drugi to Heroku.

enter image description here

Daj Heroku przechowalni nazwy, takie jak 'Heroku' w sekcji Post-build Actions użyć wydawcy Git. Pamiętaj, aby wybrać nazwę heroku w polu Nazwa docelowego pilota. enter image description here

zależności od sposobu skonfigurowaniu Konstruowanie spust nad projektem GitHub, kiedy kończy budować Jenkins będzie apelować wynikowy zrzut do repozytorium Heroku, w wyniku wdrożenia.

+3

Co z uwierzytelnianiem? –

+0

Uwierzytelnianie @DominicTobias odbywa się przez dodanie klucza ssh serwera Jnkins do Heroku. – Putna

+0

@Putna dzięki, skończyło się na tej trasie (przesuwając folder budowy do heroku) i używając klucza ssh na jenkins –

1

Najpierw należy przełączyć swój projekt używać ssh-klucze uwierzytelniania i dodaj swój publiczny ssh-klucz do konta Heroku:

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

Z

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

można dowiedzieć się URL używać jako adresu URL repozytorium w konfiguracji Jenkins. Następnie postępuj zgodnie z instrukcjami podanymi w odpowiedzi od @Andy Glover (patrz także http://thediscoblog.com/blog/2014/01/24/continuous-delivery-for-heroku-with-jenkins/), aby skonfigurować swojego Jenkinsa.

Na koniec, aby umożliwić Jenkinsowi przejście do repozytorium git w Heroku, powinieneś poprosić administratora Jenkins, by dał ci publiczny klucz ssh użytkownika root/jenkins wykonującego twoje zadanie Jenkins. Dodaj ten klucz publiczny przez swój Heroku dashboard do swojego konta Heroku. Jeśli twoja praca nad budową się powiedzie, Jenkins będzie mógł przesłać na twoje konto Heroku, co spowoduje wdrożenie.

Powiązane problemy