Ciągła integracja projektów Django za pomocą Jenkinsa
Jenkins to narzędzie do śledzenia wykonywanych zadań, do "ciągłej integracji" projektów. Aplikacja ta może śledzić wykonywanie zadań z crona, czy też sama wykonywać zadania jak np. testowanie i budowanie aplikacji gdy pojawi się nowa zmiana w repozytorium. Django może skorzystać z django-jenkins by zapewnić efektywną obsługę projektów Django w Jenkinsie. Django-Jenkins zapewnia informacje o pokryciu kodu testami, czy naruszenia pep8, pylint, pyflakes itd.
W tym artykule zaprezentuję jak zacząć z Jenkinsem odpalając go lokalnie dla lokalnego kodu. W wersjach "produkcyjnych" Jenkins obserwowałby jakieś repozytorium, czy współpracował z jakimś systemem do recenzowania kodu (np. Gerritem).
Jenkins
Na stronie Jenkinsa znajdziemy pakiety dla różnych systemów, jak i na samej górze listy plik WAR, który możemy pobrać i odpalić bez integrowania w system (choć mogą być potrzebne jakieś zależności... w szczególności JAVA ;))
- Pobieramy Jenkins w pliku WAR.
- Odpalamy go z konsoli za pomocą polecenia
java -jar jenkins.war
- Jenkins po chwili powinien uruchomić się. Dostępny będzie pod adresem http://localhost:8080/

Jenkins po uruchomieniu z dodanym przeze mnie pierwszym zadaniem

Instalowanie wtyczek w Jenkinsie
Dodawanie zadania dla projektu Django
Klikamy Nowe i tworzymy nowe zadanie. Podajemy nazwę i wybieramy typ - "Build a free-style software project". Jeżeli mamy już jakieś podobne zadanie możemy je skopiować.
Dodawanie nowego zadania

Wskazujemy repozytorium lub ścieżkę do katalogu udającego repozytorium

Konfiguracja wyzwalaczy dla zadania

Polecenia do wykonania przy budowaniu aplikacji

Konfiguracja raportów pokrycia kodu testami

Konfiguracja raportów z przebiegu testów

Konfiguracja raportów naruszeń
Django-Jenkins
Aplikację instalujemy standardowo:JENKINS_TASKS = (
'django_jenkins.tasks.with_coverage',
'django_jenkins.tasks.django_tests',
'django_jenkins.tasks.run_pep8',
'django_jenkins.tasks.run_pyflakes',
)
Odpalanie testów wszystkich aplikacji w INSTALLED_APPS oraz Django to nie najlepsze rozwiązanie. Dla django-jenkins można zdefiniować PROJECT_APPS - listę naszych aplikacji, które chcemy testować. W INSTALLED_APPS umieszczamy aplikacje Djangowskie i inne aplikacje osób trzecich, których testować nie chcemy, np:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'javascript_settings',
'django_jenkins'
)
PROJECT_APPS = (
'jsdemo',
'testapp',
)
INSTALLED_APPS += PROJECT_APPS
Co ciekawego powie nam Jenkins?

Lista budów naszego zadania w Jenkinsie
- Podgląd konsoli: przebieg z budowy. Jeżeli budowa się nie udała tutaj zazwyczaj znajdziemy przyczynę. Czasami jeżeli Jenkins ma zainstalować pakiety z pypi może to się nie udać (serwer pypi niedostępny) - wtedy budowa się nie uda nie z naszej winy. Wtedy trzeba ją ponowić (retrigger).
- Coverage Report: raport pokrycia kodu testami. Zobaczymy, które części kodu są pokryte testami, a które nie. Zobaczymy też czy w pełni testujemy wszystkie conditionale/branche kodu
- Violations: raporty (ze wskazaniem w plikach) naruszeń zasad, stylistyki kodu itp. (w zależności co jest skonfigurowane) - pep8, pylint, pyflakes standardowo.




Więcej można znaleźć na django-jenkins Tutorial , czy Continuous Integration with Jenkins.
Comment article