W procesie ciągłej integracji ważnym etapem jest otrzymanie informacji o statusie zakończonego buildu. Travis umożliwia dystrybuowanie powyższej informacji poprzez powiadomienia na e-mail (opcja domyślna), IRC, chat oraz webhook. Osobiście nie lubię mieć zapchanej skrzynki przez informacje o każdej wykonanej kompilacji. Jednym z rozwiązań by ograniczyć spam jest ustawienie powiadomień e-mail tylko dla nieprawidłowego builda. W praktyce warto powiadomienia grupować dla całego zespołu np. na jednym kanale (pokoju) na Slacku. Dzięki temu każdy członek zespołu automatycznie ma informacje czy zmiany w kodzie na repozytorium czegoś nie popsuły. Czym jest Slack? Slack to proste narzędzie służące do efektywnej komunikacji zespołowej dostępne przez www, aplikacje desktopowe i mobilne. Dzisiaj zaprezentuję jak można wykonać w prosty sposób integracje Slacka z Travis CI.

Integracja

W celu wysłania powiadomienia z Travis CI do kanału w Slack należy na Slacku skonfigurować nową integrację z Travis. Przechodzimy na stronę Slack i wprowadzamy workspace Slack URL, w moim przypadku jest to devkrpl.slack.com. Następnie logujemy się swoimi poświadczeniami i wybieramy kanał, na którym będą publikowane informacje np. #master-notifications, #release, #build, zależy od przyjętej przez Was konwencji.

travis slack

Po wyborze kanału klikamy „Add Travis CI integration” i otrzymujemy automatycznie gotowy kod dla konfiguracji. Z ustawień kopiujemy kod powiadomień zawierający nazwę konta, kanał i token do pliku .travis.yml.

Szyfrowanie tokena

Złą praktyką jest jawne kopiowanie tokena do pliku konfiguracyjnego dla publicznych repozytoriów. Token powinniśmy zaszyfrować, sugerowaną opcją jest wykorzystanie do tego Travis Command Line Client. W celu instalacji Travis Client na Ubuntu należy wykonać poniższe komendy.

sudo apt install ruby ruby-dev
sudo gem install travis

Po zakończeniu instalacji, wywołujemy komendę do szyfrowania nazwy konta, kanału i tokena.

travis encrypt "<account>:<token>#channel" --add notifications.slack.rooms

Konfiguracja powiadomień

Dopisek „–add notifications.slack.rooms” do komendy powoduje, że po zakończeniu procesu szyfrowania konfiguracja automatycznie zostanie dodana do pliku .travis.yml. W ostatnim kroku ustawiamy poziom powiadomień dla kanału. Wyróżniamy trzy stany dla flag (on_success i on_failure):

  • always: zawsze wysyłane powiadomienie;
  • never: nigdy nie jest wysyłane powiadomienie;
  • change: powiadomienie wysyłane, gdy build zmieni status.

W przypadku Slacka zawsze będę chciał otrzymać powiadomienia, natomiast dla e-maila tylko w przypadku niepowodzenie builda. Poniżej kod pliku konfiguracyjnego .travis.yml po uwzględnieniu omawianych zmian.

language: csharp
sudo: required
dist: trusty
mono: none
dotnet: 2.1.3
branches:
- only:
  - master
before_script:
- dotnet restore
script:
- dotnet build src/Sample.Api/
- dotnet test tests/Sample.Tests.EndToEnd/
notifications:
  slack:
    rooms:
      secure: KpeAARIZDm75ZyYOsBa6WERMnDI4oaigjvNEc5RUT/fTzk5Fq9A8y5ZUwc5fJamVKm8XEMMeaZ6+uW5O8xRglojvW6xWi6UdWAdo93KMNiBNAE/kdlu2oT7wJ5AusibGDv0DCSSdtKq5z8u0ADWsWW5Lt0oBhveFRZcVr77dA+DMbFIE91ht0KvrETlgXpp8P2S4p7QYj8guYR0Nc5wH5/ffiM0JshLe8Ue1HSv2Kc54qKIXNfSKkgsgmIdodAH7DiopLeaOMgDFa5ddUjUXC3BLmqRzGK07oKuIDpW7C0loK9/8ZGgUCVAJXRgWfGdHpwYwrIE9/MrAhhxHUwa38rXTFhyqz25U5nBEc6BaoyOWPFqmC2qHw/XpjKDtf3GrRegJk8Li1JhyjK1PPw7zv4/6XsOa82a/qzbqYReh+5JtALvGiuYENpE1DELAFqKRoi8jfKamBm39EGpcPHscnaSr57g9LMzdb7Y2dTKngMVXbXO89tNaZV9/FPbeuAxOG1dnn+45AbROUBhPd7hMK9Z1K+2HrMm2G3ohlpRE+zX84apbkRpqPGhZyytuhEJUg+9G165B+Yd4rVTjyr+NzeR9LWPL57COu7u9fBFPygWo7+dI93e9Z1NVBOnlq1MC9NypbYf4WWgOOeYmXcYrdNY3menBsdZGn2G60jgVElM=
    on_success: always
    on_failure: always
  email:
    recipients:
      - tester@devkr.pl
    on_success: never
    on_failure: always

Opcjonalnie w pliku .travis.yml można także zdefiniować szablon (template) dla wiadomości, która zostanie wyświetlona na kanale.

slack notifications

Po wypchnięciu zmiany w kodzie na repozytorium, zostanie wykonany build i w zależności od statusu builda zostanie przesłana wiadomość na Slack i e-mail.  I to by było na tyle, musicie przyznać, że integracja jest dość łatwa i przyjemna, więcej o dostępnych opcjach powiadomień można przeczytać w dokumentacji Travis CI.