1. Jenkins - TomekZet/mlworkshops GitHub Wiki
Jenkins to system ciągłej integracji (Continous Integration, CI) napisany w języku Java, będący kontynuacją projektu Hudson. Umożliwia on między innymi automatyczne budowanie, testowanie i wydawanie oprogramowania. Działa jako aplikacja webowa z graficznym interfejsem, umożliwiająca łatwe zarządzanie i monitorowanie wykonywanych w niej zadań.
Dzięki stosowaniu narzędzi ciągłej integracji takich jak Jenkins zespół pracujący nad projektem zyskuje:
- wspólne środowisko do testowania zmian, replikowania błędów
- łatwość monitorowania zmian zachodzących w oprogramowaniu
- środowisko do integracji ze sobą części składowych (np. modułów, modeli) w jedną całość
- automatyzację zadań, takich jak bydowanie, wydawanie, testowanie
- środowisko, w którym można stworzyć prosty graficzny interfejs służący do uruchamiania pewnych zadań z poziomu przeglądarki
Funkcjonalność Jenkinsa może być rozszerzana za pomocą licznych wtyczek (pluginów) oferujących bardzo szerokie możliwości dostosowywania go do własnych potrzeb, a także integracji z innymi narzędziami.
Dobrą praktyką jest przygotowanie środowiska ciągłej integracji przed rozpoczęciem prac nad właściwym zadaniem/projektem. Dzięki temu możemy od początku w zautomatyzowany sposób budować i testować nasz program i śledzić generowane przez niego wyniki.
Na początku przygotujemy Jenkinsowy projekt (w angielskie wersji "Job"). Docelowo będzie on pobierał wyniki rozpoznawania mowy z innego projektu i obliczał wartości metryki WER dla tych wyników.
Na początku zajmiemy się samą konfiguracją projektu, tak, żeby już w trakcie tworzeniu skryptu obliczającego metryki można było testować jego działanie w zewnętrznym środowisku, jakim jest Jenkins.
-
Zaloguj się na http://tzietkiewicz.vm.wmi.amu.edu.pl:8080 za pomocą konta wydziałowego (jak w laboratoriach WMI)
-
Utwórz nowy projekt (Job)
Istnieje kilka rodzajów projektów w Jenkinsie.
Po kliknięciu "Nowy projekt" zobaczymy listę dostępnych rodzajów projektów. Nas interesuje projekt typu "Pipeline".
Jako nazwę proszę wpisać "USERNAME-metrics", gdzie USERNAME proszę zastąpić swoją nazwą użytkownika
-
Zdefiniuj Pipeline
Projekty typu Pipeline definiuje się w pliku Jenkinsfile za pomocą skryptu napisanego w jednym z dwóch dostępnych DSL (Domain Specific Language):
- Scripted pipeline (podzbiór języka Groovy)
- Declarative pipeline
Pierwszy z nich daje większe możliwości, drugi jest łatwiejszy i bardziej przejrzysty, ale ma mniejszą siłę ekpresji.
Fragmenty kodu można również generować przy pomocy kreatora, dostępnego pod linkiem "Pipeline syntax" na stronie każdego projektu.
Jenkinsfile może być wprowadzony bezpośrednio z poziomu przeglądarki, albo pobrany z repozytorium.
Zacznijmy od pierwszej opcji. Jako przykładowego pipeline użyj przykładu Hello World podanego na https://jenkins.io/doc/book/pipeline/getting-started/
Zapisz projekt i spróbuj go uruchomić (przycisk "Uruchom"/"Run" na głównej stronie projektu).
-
Podłącz repozytorium git
-
Stwórz nowe publiczne repozytorium git na wydziałowym serwerze https://laboratoria.wmi.amu.edu.pl/uslugi/pozostale-uslugi/git/ W przypadku problemów z utworzeniem repozytorium zdalnie, może być to również dodwolne inne, publicznie dostępne repozytorium, np. na GitHub. Możesz je nazwać np. sNRINDEKSU-mlworkshops
-
Sklonuj repozytorium lokalnie zgodnie ze wskazówkami wyświetlonymi po jego utworzeniu.
-
Utwórz plik "Jenkinsfile" (zawartość taka sama jak poprzednio) i dodaj go do repozytorium.
-
W ustawieniach projektu przełącz "Pipeline definition" na "Pipeline script from SCM" i podaj ścieżkę do nowo utworzonego repozytorim.
-
Projekt powinien się uruchamiać za każdym razem, kiedy pojawią się nowe zmiany w repozytorium: "Konfiguracja" -> "Build Triggers" -> "Poll SCM"
-
W razie problemów z klonowaniem/pushowaniem repozytorium, użyj protokołu ssh zamiast https (przy kopiowaniu ścieżki do repozytorium). Będzie to wymagało skopiowania zawartości pliku ~/.ssh/id_rsa.pub i wklejenia go w ustawieniach wydziałowego gita w zakładce SSH Keys
-
-
Edytuj zawartość Jenkinsfile tak, żeby realizował on następujące zadania:
- Sklonowanie repozytorium git (krok "checkout: Check out from version control")
- Kopiowanie plików z wynikami rozpoznawania mowy z artefaktów projektu ASR-eval (projekt ten symuluje prawdziwy system ASR: okresowo produkuje plik wikinews_results.txt z wynikami rozpoznawania mowy): - użyj kroku "copyArtifacts" - możesz wygenerować potrzebny kod za pomocą generatorów w "Pipeline Syntax")
- Wywołanie skryptu shella (krok "sh: Shell Script"). - Domyślnie tutaj znajdzie się wywołanie naszego skryptu liczącego metryki. Na razie wystarczy, że ten skrypt będzie "liczył" ilość linii w wejściowym pliku (polecenie "wc -l"). - Skrypt powinien być zapisany w repozytorium. Unikamy wpisywania treści skryptów bezpośrednio w Jenkinsfile! - Skrypt powinien zapisywać wyniki swojego działania do pliku
- Plik powstały w kroku 3. należy archiwizować (krok "archiveArtifacts"), tak, żeby mógł być wykorzystany przez kolejne projekty.