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:
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:
Teraz można wygenerować token OAuth:
Identycznie jak w przypadku Travisa token należy zaszyfrować. Tutaj sprawa jest prosta - token wklejamy na tej stronie: https://ci.appveyor.com/tools/encrypt.
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:
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.