Jenkins (oprogramowanie)

Jenkins
Logo Jenkins
Logo programu
Ilustracja
Zrzut ekranu
Autor Kohsuke Kawaguchi
Pierwsze wydanie 2011-02-02 2 lutego 2011(dts)[1]
Aktualna wersja stabilna 2.458
(14 maja 2024) [±]
Język programowania Java
Rodzaj serwer CI/CD
Licencja MIT
Strona internetowa

Jenkins – serwer typu open source służący do automatyzacji związanej z tworzeniem oprogramowania. W szczególności ułatwia budowanie, testowanie i wdrażanie aplikacji, czyli umożliwia rozwój oprogramowania w trybie ciągłej integracji i ciągłego dostarczania. Jenkins działa na serwerach Java takich jak Apache Tomcat, Jetty itp[2], ale umożliwia budowanie aplikacji napisanych w wielu językach programowania. Do pobierania kodu używa standardowo różnych narzędzi kontroli wersji, w tym m.in. Subversion, Git, Mercurial, Perforce, ClearCase i AccuRev[3]. Do budowania ma wbudowaną obsługę projektów opartych na Apache Ant, Apache Maven i sbt, ale może również wykonywać dowolne skrypty powłoki (Unix/Linux) i polecenia wsadowe systemu Windows.

Historia

Jenkins początkowo nosił nazwę Hudson i został przemianowany w 2011 roku po sporze z Oracle. Oracle sforkował projekt i rościł sobie prawa do pierwotnej nazwy projektu. Hudson, był potem rozwijany przez Oracle przez pewien czas, zanim został przekazany Fundacji Eclipse. Oracle Hudson nie jest już utrzymywany[4] i został ogłoszony przestarzałym w lutym 2017[5].

Około 2007 roku Hudson stał się znany jako lepsza alternatywa dla Cruise Control i innych serwerów typu open source[6]. Na konferencji JavaOne w maju 2008 oprogramowanie zdobyło nagrodę Duke’s Choice Award w kategorii Developer Solutions[7].

W listopadzie 2010, po przejęciu Sun Microsystems przez Oracle, w społeczności Hudson pojawił się problem związany z używaną infrastrukturą, który rozrósł się i zaczął obejmować pytania dotyczące zarządzania i kontroli przez Oracle[8]. Odbyły się negocjacje między głównymi autorami projektu i Oracle, ale mimo wielu obszarów porozumienia kluczową kwestią sporną był znak towarowy „Hudson” (zastrzeżony przez Oracle w grudniu 2010). W rezultacie 11 stycznia 2011 ogłoszono głosowanie na zmianę nazwy projektu z „Hudson” na „Jenkins”. Propozycja została przyjęta znaczącą większością głosów społeczności i 29 stycznia 2011 utworzono projekt Jenkins[9].

1 lutego 2011 firma Oracle poinformowała, że zamierza kontynuować rozwój Hudsona i uznała Jenkinsa tylko forkiem. Jenkins i Hudson kontynuowali zatem jako dwa niezależne projekty każdy twierdząc, że drugi jest jego forkiem[10]. Według stanu na czerwiec 2019 organizacja Jenkins na GitHub miała 667 członków projektu i około 2200 publicznych repozytoriów[11], natomiast Hudson miał wtedy 28 członków, 20 publicznych repozytoriami i ostatnią aktualizacje z 2016 roku[12].

W 2011 roku programista Kohsuke Kawaguchi otrzymał nagrodę O’Reilly Open Source Award za pracę nad projektem Hudson/Jenkins[13][14].

20 kwietnia 2016 została wydana wersja 2.0 z domyślnie włączoną wtyczką Pipeline[15]. Wtyczka umożliwia pisanie instrukcji kompilacji przy użyciu języka dziedzinowego opartego na języku Groovy.

Jenkins zastąpił Hudsona od 8 lutego 2017 roku w Eclipse[5].

W marcu 2018 zaprezentowano projekt oprogramowania Jenkins X dla Kubernetesa[16]. Nowy projekt ma mieć wbudowaną obsługę różnych dostawców chmury, w tym między innymi AWS EKS[17].

Budowanie zadań

Wyzwalacze

Zadania (ang. job) mogą być uruchomione za pomocą różnych wyzwalaczy (ang. trigger), na przykład[18]:

  • Za pomocą webhook, który jest uruchamiany po wypchniętych zmianach w systemie kontroli wersji.
  • Za pomocą harmonogramu z mechanizmem podobnym do crona.
  • Poprzez wykonanie żądania do konkretnego adresu URL (z innego systemu).
  • Przez wywołanie jednego zadania z drugiego (za pomocą Groovy lub krok).
  • Formalnie wyzwalaczem jest również ręczne wykonanie zadania (wówczas jako wyzwalający jest podany użytkownik).

Poszczególne zadania mogą mieć różne parametry. Parametry mogą być wypełnione przez użytkownika lub przekazane z jednego zadania do drugiego.

Kroki budowania

Każde zadanie składa się z kroków, które można wykonać przed, po i w ramach budowania zadania. Jednym krokiem może być wykonanie skryptu shell, wdrożenie plików przez ssh, czy np. kompilacji za pomocą Mavena.

Niektóre kroki można prosto zamieniać miejscami przez drag&drop. Można również wykonywać je warunkowo. Typowo gdy jeden krok budowania się nie uda, to pozostałe nie zostaną już wykonane.

Wtyczki

Wtyczki rozszerzają możliwości Jenkinsa na różne sposoby. Część z wtyczek jest instalowana od razu, a część można pobrać po instalacji (przez interfejs do zarządzania Jenkinsem)[19].

Rodzaje wtyczek:

  • Do kompilacji i ogólniej do rozszerzania listy dostępnych kroków budowania (np. możliwość bezpośredniego uruchomienia Pythona).
  • Do zmieniany i dodawania elementów interfejsu (np. dodają możliwość wyświetlania dodatkowych kolumn w widoku zadań).
  • Do integracji Jenkinsa z systemami do zgłoszenia błędów oraz do różnego rodzaju powiadomień (np. na Skype i Slack).
  • Do testów jednostkowych, które generują raporty z testów w różnych formatach (na przykład JUnit dostępny w pakiecie z Jenkinsem, MSTest, NUnit itp.) oraz do innych testów np. do sprawdzania składni za pomocą SonarQube.
  • Do uwierzytelniania i autoryzacji (np. LDAP, PAM).

Bezpieczeństwo

Bezpieczeństwo danej instalacji Jenkinsa zależy od dwóch czynników: kontroli dostępu i ochrony przed zagrożeniami zewnętrznymi. Kontrolę dostępu można dostosować na dwa sposoby: uwierzytelnianie i autoryzacja użytkowników[20]. Istnieją również zabezpieczenia przed zagrożeniami zewnętrznymi m.in. przed atakami CSRF oraz złośliwą kompilacją[21][22].

Nagrody i wyróżnienia

  • 2011: InfoWorld Bossie Award – nagroda za najlepsze oprogramowanie Open Source[23].
  • 2014: Geek Choice Award[23].
  • 2017: DevOps Dozen – nagroda dla najlepszego projektu Open Source[23][24].

Zobacz też

  • Hudson (oprogramowanie)

Przypisy

  1. Jenkins 1.396 released. jenkins.361315.n4.nabble.com. [zarchiwizowane z tego adresu (2018-12-08)]., The first release of Jenkins is posted, Kohsuke Kawaguchi.
  2. Installing Jenkins [online], jenkins.io [dostęp 2021-11-12]  (ang.).
  3. Source code management plugins [online], plugins.jenkins.io [dostęp 2021-11-12] .
  4. Jenkins – Eclipsepedia [online], wiki.eclipse.org [dostęp 2021-11-12] .
  5. a b Jenkins – Eclipsepedia [online], wiki.eclipse.org, 8 lutego 2017 [dostęp 2021-11-12] .
  6. continuous integration – What is the difference between Hudson and CruiseControl for Java projects? [online], Stack Overflow [dostęp 2021-11-12] .
  7. GenevièveG. Duboscq GenevièveG., 2008 JavaOne Conference: Duke’s Awards Choice Winners for 2008 [online], java.sun.com, 2008 [dostęp 2021-11-12] [zarchiwizowane z adresu 2009-01-29] .
  8. SavioS. Rodrigues SavioS., Oracle’s open source missteps continue with Hudson project [online], InfoWorld, 3 grudnia 2010 [dostęp 2021-11-12]  (ang.).
  9. BrianB. Proffitt BrianB., Hudson devs vote for name change; Oracle declares fork [online], Computerworld, 2 lutego 2011 [dostęp 2021-11-12]  (ang.).
  10. PaulP. Krill PaulP., Oracle hands Hudson to Eclipse, but Jenkins fork seems permanent [online], InfoWorld, 4 maja 2011 [dostęp 2021-11-12]  (ang.).
  11. Jenkins [online], GitHub [dostęp 2019-01-01]  (ang.).
  12. Hudson CI Server [online], GitHub [dostęp 2019-01-01]  (ang.).
  13. Kohsuke Kawaguchi: Geek of the Week [online], Simple Talk, 17 lipca 2012 [dostęp 2021-11-12]  (ang.).
  14. O’Reilly Open Source Awards [online], O’Reilly Open Source Convention: OSCON, 28 lipca 2011 [dostęp 2021-11-12] [zarchiwizowane z adresu 2020-06-15] .
  15. HemantH. Jain HemantH., What’s New in Jenkins 2.0 [online], Red Hat Developer, 24 sierpnia 2016 [dostęp 2021-11-12]  (ang.).
  16. JamesJ. Strachan JamesJ., Introducing Jenkins X: a CI/CD solution for modern cloud applications on Kubernetes [online], jenkins.io, 19 marca 2018 [dostęp 2021-11-12]  (ang.).
  17. ArunA. Gupta ArunA., Continuous Delivery with Amazon EKS and Jenkins X [online], AWS Open Source Blog, 7 listopada 2018 [dostęp 2021-11-12] [zarchiwizowane z adresu 2019-05-06] .
  18. IrisI. Chubb IrisI., Jenkins Terms Defined and Demystified [online], blog.inedo.com [dostęp 2021-11-12]  (ang.).
  19. Managing Plugins [online], jenkins.io [dostęp 2021-11-12]  (ang.).
  20. Access Control [online], jenkins.io [dostęp 2021-11-12]  (ang.).
  21. CSRF Protection [online], jenkins.io [dostęp 2021-11-12]  (ang.).
  22. Controller Isolation [online], jenkins.io [dostęp 2021-11-12]  (ang.).
  23. a b c Awards [online], jenkins.io [dostęp 2021-11-12]  (ang.).
  24. Third Annual DevOps Dozen Winners Announced [online], DevOps.com, 23 stycznia 2018 [dostęp 2021-11-12]  (ang.).

Linki zewnętrzne

  • Oficjalna witryna.
  • Moser, Manfred, O’Brien, Tim: Hudson free book. Oracle, Inc., 2011-11-25.
  • Kohsuke Kawaguchi: Jenkins creator Kohsuke Kawaguchi on The Changelog podcast talking about the project origin and name change. the changelog, 2011-02-08. [dostęp 2016-03-03]. (ang.).
  • Kohsuke Kawaguchi: 7 Ways to Optimize Jenkins/Hudson. CloudBees. [dostęp 2021-11-12]. [zarchiwizowane z tego adresu (2011-10-27)]. (ang.).
  • Assaf Lavie: Building Docker with Jenkins. cloudshare.com, 2017-03-01. [dostęp 2021-11-12]. (ang.).