Jenkins (oprogramowanie)
![]() Logo programu | |
![]() Zrzut ekranu | |
Autor | Kohsuke Kawaguchi |
---|---|
Pierwsze wydanie | 2011-02-02 2 lutego 2011(dts)[1] |
Aktualna wersja stabilna | 2.473 (21 sierpnia 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
- ↑ 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.
- ↑ Installing Jenkins [online], jenkins.io [dostęp 2021-11-12] (ang.).
- ↑ Source code management plugins [online], plugins.jenkins.io [dostęp 2021-11-12] .
- ↑ Jenkins – Eclipsepedia [online], wiki.eclipse.org [dostęp 2021-11-12] .
- ↑ a b Jenkins – Eclipsepedia [online], wiki.eclipse.org, 8 lutego 2017 [dostęp 2021-11-12] .
- ↑ continuous integration – What is the difference between Hudson and CruiseControl for Java projects? [online], Stack Overflow [dostęp 2021-11-12] .
- ↑ 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] .
- ↑ SavioS. Rodrigues SavioS., Oracle’s open source missteps continue with Hudson project [online], InfoWorld, 3 grudnia 2010 [dostęp 2021-11-12] (ang.).
- ↑ BrianB. Proffitt BrianB., Hudson devs vote for name change; Oracle declares fork [online], Computerworld, 2 lutego 2011 [dostęp 2021-11-12] (ang.).
- ↑ PaulP. Krill PaulP., Oracle hands Hudson to Eclipse, but Jenkins fork seems permanent [online], InfoWorld, 4 maja 2011 [dostęp 2021-11-12] (ang.).
- ↑ Jenkins [online], GitHub [dostęp 2019-01-01] (ang.).
- ↑ Hudson CI Server [online], GitHub [dostęp 2019-01-01] (ang.).
- ↑ Kohsuke Kawaguchi: Geek of the Week [online], Simple Talk, 17 lipca 2012 [dostęp 2021-11-12] (ang.).
- ↑ 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] .
- ↑ HemantH. Jain HemantH., What’s New in Jenkins 2.0 [online], Red Hat Developer, 24 sierpnia 2016 [dostęp 2021-11-12] (ang.).
- ↑ 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.).
- ↑ 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] .
- ↑ IrisI. Chubb IrisI., Jenkins Terms Defined and Demystified [online], blog.inedo.com [dostęp 2021-11-12] (ang.).
- ↑ Managing Plugins [online], jenkins.io [dostęp 2021-11-12] (ang.).
- ↑ Access Control [online], jenkins.io [dostęp 2021-11-12] (ang.).
- ↑ CSRF Protection [online], jenkins.io [dostęp 2021-11-12] (ang.).
- ↑ Controller Isolation [online], jenkins.io [dostęp 2021-11-12] (ang.).
- ↑ a b c Awards [online], jenkins.io [dostęp 2021-11-12] (ang.).
- ↑ 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.).