Przyjmijmy scenariusz wdrażania naszej aplikacji na serwery w momencie utworzenia nowej wersji. Cały proces jest dosyć długi – musimy kod wypchać do repozytorium, połączyć się z serwerem, zaciągnąć zmiany, zbudować nową wersję aplikacji i w końcu ją uruchomić.
Oczywiście ten proces może wyglądać bardzo różnie, ale nie skłamię jeżeli powiem, że jest to najbardziej standardowy scenariusz.
Posłużę się definicją, która najbardziej mi się spodobała.
Continuous Integration (CI): automated build and execution of at least unit tests to prove integration of new code with existing code, but preferably integration tests (end-to-end).
Continuous Deployment (CD): automated deployment when code passes CI at least into a test environment, preferably into higher environments when quality is proven either via CI or by marking a lower environment as PASSED after manual testing. I.E., testing may be manual in some cases, but promoting to next environment is automatic.
Samym procesem CD zajmiemy się kiedy indziej.
Dzisiaj opiszę jak można zautomatyzować proces CI. Finalnym efektem będzie sytuacja kiedy wysłanie zmian do repozytorium skutkować będzie zbudowaniem się aplikacji oraz przetestowaniem jej przez testy automatyczne.
Pełny kod poniższej aplikacji znajduje się pod adresem https://github.com/mtszpater/Angular-CI
Zbudowanie aplikacji
Przejdźmy szybko przez proces budowania aplikacji angularowej.
ng new my-example-app
Dodanie pliku .travis.yml do aplikacji
Travis-CI – jest to darmowy system umożliwiający tworzenie procesów CI. Można go podpiąć bez problemu pod naszego Githuba.
Po stronie naszej aplikacji nie jest wymagana praktycznie żadna zmiana w kodach. Wystarczy, że dorzucimy plik .travis.yml.
language: node_js
node_js:
- "8"
sudo: true
dist: trusty
branches:
only:
- master
before_script:
- export CHROME_BIN=/usr/bin/google-chrome
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- sudo apt-get update
- sudo apt-get install -y libappindicator1 fonts-liberation
- wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
- sudo dpkg -i google-chrome*.deb
script:
- ng test --watch false -cc
- npm run e2e
- ng build --prod
W tym pliku znajduje się opis operacji jakie Travis powinien wykonać po wysłaniu przez nas kodu do repozytorium. Określony został branch na który powinien Travis reagować. Commity do innych będą pomijane w naszym procesie. Przyda to się jak w przyszłości będziemy budować proces CD. Nie chcemy przecież robić wrzutek na nasze środowiska co 5 minut. 🙂
Przed uruchomieniem aplikacji musimy zaciągnąć google-chrome, aby możliwe było uruchomienie testów end-to-end.
Rejestracja w Travis-CI i podłączenie repozytorium
Po zalogowaniu się na stronie https://travis-ci.com/ wystarczy, że zalogujemy się za pomocą naszego konta GitHub. I tak na prawdę to już wystarczy. Travis standardowo reaguje na wszystkie repozytoria, które zaciągniemy z naszego githuba po synchronizacji konta.

Spróbujmy wysłać teraz nowe kody na nasz branch master. I patrzmy jak dzieje się magia… 🙂


W logach widzimy jak Travis wykonuje wszystkie operacje, które mu zleciliśmy.

Po wszystkim widzimy, że nasza aplikacja przeszła wszystkie testy i poprawnie się zbudowała.

I na koniec… Status zbudowania aplikacji na Githubie.
