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.