Integracja CI ze Slackiem

Przy procesie ciągłej integracji ważną częścią jest monitorowanie czy ostatnie zmiany nie sprawiają problemów z kompilacją i uruchamianiu na różnych platformach. Podczas developmentu na bieżąco buduję i uruchamiam program na lokalnej maszynie. Niestety to nie wyklucza możliwości, kiedy na czystym środowisku projekt nie będzie w stanie się zbudować. Tutaj z pomocą przychodzą powiadomienia - kilka minut po wprowadzaniu zmian do repozytorium programista może dostawać informację o tym, że dany commit popsuł buildy dla danej platformy.

Obydwa używane przeze mnie rozwiązania - Travis CI oraz AppVeyor - wspierają domyślnie powiadomienia przez email, ale przy okazji pisania poprzedniego wpisu chciałem wypróbować coś innego. Wiele projektów posiada własny kanał IRC - jest to dobrze miejsce, aby podpiąć powiadomienia o popsutych buildach czy oczekujących Pull Requestach. Niestety ja nie należę do pokolenia, które korzystało z IRCa i jeżeli mogę to unikam tej technologii.

Ostatnio bardzo popularnym rozwiązaniem jest Slack - dziwna hybryda czatu, IRCa i forum. Pierwszy raz zetknąłem się z nim rok temu przy okazji Daj się poznać 2016. Wtedy ktoś wpadł na pomysł żeby zebrać programistów z Polski w jednym miejscu i tak powstał Slack Devs PL (dołączyć można tutaj).

Każdy może stworzyć własnego Slacka - tak też i ja uczyniłem. Na stronie https://slack.com/create założyłem konto powiązane z projektem. Następnie po zalogowaniu dodałem kanał #build, gdzie będą lądować informacje o stanie integracji.

Konfiguracja Travis CI

Proces łączenia Travisa ze Slackiem jest bardzo prosty - aplikacji Travis CI integration pozwalamy na dostęp do naszego Slacka i wybieramy na jakim kanale ma umieszczać informacje. Automatycznie zostanie wygenerowany token, który musimy zamieścić w pliku .travis,yml. Zanim jednak to uczynimy powinniśmy go zaszyfrować.

W tym celu potrzebujemy Rubiego (na Windowsa - RubyInstaller), aby zainstalować narzędzia Travisa:

λ gem install travis -v 1.8.8 --no-rdoc --no-ri

Następnie szyfrujemy token (gotowa komenda do skopiowania znajduje się w Setup Instructions):

λ travis encrypt "avocado-emu:TOKEN"

Ostatni krok to dodanie zmian do .travis.yml - można użyć parametru --add notifications.slack, ale w moim przypadku narzędzie to przeformatowało plik .yml i paradoksalnie zepsuło buildy. Na końcu wystarczy YAMLa dopisać:

notifications:
  email: false
  slack:
    secure: ENCRYPTED_TOKEN

Wraz z wprowadzeniem zmian do repozytorium na Slacku po kilku minutach powinien pojawić się komunikat:

Travis CI successful build

Przy okazji wyłączyłem powiadomienia mailowe, które nie będą już potrzebne.

Konfiguracja AppVeyor

W tym przypadku jest trochę trudniej - nie ma gotowej aplikacji na Slacku i takową musimy utworzyć sami.

Na stronie https://api.slack.com/apps zakładamy nową aplikację - ja nazwałem ją "AppVeyor build bot" i podpiąłem ją pod Slacka projektu. Przed możliwością instalacji aplikacji musiałem dodać uprawnienia:

Slack permissions

Nie jestem pewien czy to konieczny krok, ale bez niego nie byłem w stanie wygenerować tokenu.

Teraz można wygenerować token OAuth:

OAuth token

Identycznie jak w przypadku Travisa token należy zaszyfrować. Tutaj sprawa jest prosta - token wklejamy na tej stronie: https://ci.appveyor.com/tools/encrypt.

Token encryption

Integracje można przeprowadzić w dwóch miejscach - panel AppVeyor lub plik appveyor.yml. Wybrałem drugi sposób:

notifications:
  - provider: Slack
    auth_token:
      secure: ENCRYPTED_TOKEN
    on_build_success: true
    on_build_failure: true
    on_build_status_changed: true
    channel: '#build'

Po commicie powinny pojawić się obydwie notyfikacje:

CI notifications

 

Na koniec

Korzystając z aplikacji na telefon można skonfigurować push notyfikacje. Może to być jednak irytujące kiedy wpadniemy w szał commitowania i do każdego buildu będzie pojawiać się notyfikacja. W takim przypadku można ustawić powiadomienia jedynie dla uszkodzonych buildów - jak widać na przykładzie AppVeyor włączone są wszystkie powiadomienia. Można również zdefiniować format wiadomości wysyłanej na chacie jeżeli ta domyślna nam nie odpowiada.

Dokumentacja Travis CI

Dokumentacja AppVeyor

Photo credit: Nick J Webb via Visualhunt / CC BY
Ten wpis został opublikowany w kategorii Avocado, Daj się poznać 2017 - Avocado i oznaczony tagami , , . Dodaj zakładkę do bezpośredniego odnośnika.
  • Łukasz Antoniak

    Od ponad roku korzystam z integracji: Slack + Stash + Bamboo. Powiem szczerze, że taka konfiguracja zdaje swój egzamin w 100%. Wszystko mam na wyciągnięcie ręki – jeden klik i mogę zobaczyć szczegóły commita, czy builda. Dodatkowo dla zespołu z którym pracuję stworzyłem "lampkę" (arduino + neopixel ring) odpowiednich statusów buildów. Odpowiednia sekwencja efektów LED prezentuje kolejne etapy : push (kolor biały), build status (efekt "loading" zielony lub czerwony), deploy status (kolor statyczny : zielony lub czerwony). Tym samym dopiero jak zapala się czerwone światło, zerkam na slacka żeby zobaczyć co się stało, że build nie przeszedł. Fajny bajer – polecam!

    • Jakub Czekański

      Cześć Łukasz,
      W codziennej pracy również używam podobnej kombinacji – stos Atlassiana (JIRA, Stash i Bamboo) + kilka innych narzędzi, m. in. TeamCity. Faktycznie – integracja Stasha z pozostałymi systemami jest bardzo dobra.
      Niestety, są to rozwiązania płatne lub też wymagają postawienia własnego serwera.

      Natomiast rozwiązanie z lampką – świetny pomysł, może stworzę coś podobnego z użyciem ESP8266.

      • Łukasz Antoniak

        ESP8266 to świetny pomysł. Ja niestety robiłem projekt "na szybko" i powstał całkiem fajnie działający prototyp, lecz wszystkie połączenia po kablach i to jest niewątpliwie minus 🙂 W moim prototypie stworzyłem serwer w oparciu o HapiJS i JohnyFive. Serwer nasłuchuje wiadomości z odpowiedniego kanalu Slack. Wyłapuje informacje o poszczególnych zdarzeniach i zarządza neopixelami poprzez arduino. Nie jest to idealne rozwiązanie, W przyszłości chciałbym, aby Ardu działało niezależnie, bezpośrednio na połączeniu ethernetowym.

        Mam w planie kilka postów na temat prototypu lampki w ramach DSP17. Zapraszam na antoniaklukasz.eu – mam nadzieję, że wpisy pojawią się już niebawem 🙂