Jenkins to elastyczne narzędzie do tworzenia i wykonywania scenariuszy w modelu CI/CD. Scenariusz taki może składać się z przeróżnych kroków, w trakcie których wykorzystujemy zewnętrzne narzędzia takie jak skrypty Pythona. W dzisiejszym artykule zaprezentuję Ci trzy sposoby wywoływania skryptów Python w Jenkins w projektach opisywanych za pomocą zdefiniowanych akcji jak i jako pipeline.
Podejście bez wtyczki
Czy Jenkins ma wbudowane wsparcie dla języka Python i napisanych w nim programów? I tak i nie. Nie ma mechanizmu dedykowanego samemu językowi Python czy uruchamianiu napisanym w nim programów. Z drugiej strony programy w Pythonie nie wymagają zazwyczaj jakiegoś specjalnego traktowania. Poza wirtualnymi środowiskami venv uruchamiamy je z linii poleceń. Zatem tworząc pipeline naszego scenariusza posłużymy się akcją wywołania dowolnego programu napisanego w Pythonie za pomocą wiersza poleceń.
stage('build') { steps { sh 'python3 mojaaplikacja.py' } }
Tak uruchomiona aplikacja wykonana będzie w natywnym środowisku, w którym zainstalowany został Jenkins. Oznacza to, że domyślnie wszystkie niezbędne do jej wykonania biblioteki muszą być dostępne w kontekście całego systemu operacyjnego, na którym uruchamiamy aplikację.
A co jeżeli chcemy posłużyć się środowiskiem venv, w którym umieścimy niezbędne biblioteki i wykonamy program? To zadanie jest nieco trudniejsze. Nie obejdzie się bez napisania dodatkowego wrappera. Posłuży on nam, aby w pojedynczym kroku scenariusza, który wykona Jenkins zawrzeć trzy operacje. Musi on spowodować uruchomienie wirtualnego środowiska. wykonanie aplikacji, a następnie powrót do systemu operacyjnego. Nie jest to skomplikowane, ale istnieje bardziej elastyczne rozwiązanie. Wskazaną aplikację wykonamy po prostu w kontenerze Dockera.
pipeline { agent { docker { image 'moj_kontener_z_python_i_aplikacja:3.8' } } stages { stage('build') { steps { sh 'python3 mojaaplikacja.py' } } } }
Potrzebujemy odpowiedniej wtyczki
Jeżeli tworzymy projekt typu freestyle, czyli nie piszemy skryptu pipeline, a w GUI określamy kolejne kroki, aby uruchomić skrypty Pythona potrzebujemy dodatkowej wtyczki o nazwie “Python Plugin“
Gdy ją zainstalujemy to w krokach, które możemy dodać w fazie Build naszego projektu pojawi nam się nowy typ akcji Execute Python Script.
Skrypt taki uruchomiony będzie przez domyślny interpreter Pythona o nazwie python. Sam skrypt umieszczamy w polu dialogowym, nie jest on uruchamiany z pliku znajdującego się w katalogu roboczym projektu.
Panda daje więcej możliwości
Trochę więcej możliwości daje inna wtyczka o nazwie ShiningPanda Plugin. Dzięki niej skonfigurujemy kilka wersji interpreterów, z których skorzystamy, gdy będziemy dodawać wykonanie aplikacji w Pythonie jako krok w projekcie. Dlatego pierwszym krokiem jest zdefiniowanie w systemie odpowiednich interpreterów. W tym celu wybieramy Manage Jenkins > Global Tool Configuration
Wywołując skrypt Pythona odwołujemy się do utworzonej wcześniej konfiguracji. Zawartości skryptu nie umieszczamy w oknie dialogowym lecz odwołujemy się do pliku na dysku.