Programování

Kontinuální integrace s Jenkinsem

Při pohledu zpět na to, jak byl software postaven a nasazen před 15 lety, se zdá překvapivé, že naše aplikace skutečně fungovaly. V těchto dnech se životní cyklus vývoje softwaru skládal z běhu sestavení na místním počítači, ručního kopírování artefaktů na pracovní server a ručního testování každé aplikace prostřednictvím více iterací. Když byl vývojový tým spokojen s sestavením, ručně jsme nasadili aplikaci do výroby. Nejkonzistentnější věcí na tomto stylu vývoje byla nekonzistence - v procesu a ve výsledcích.

Před více než deseti lety začali agilní vývojáři přijímat a podporovat vývoj zaměřený na testování a nepřetržitou integraci (CI). S těmito technikami jsme mohli automaticky sestavit zdrojový kód, kdykoli jej vývojář zkontroloval do zdrojového úložiště a provedl vyčerpávající testovací sadu jednotek, aby zajistil, že aplikace funguje správně. Mnoho vývojářů založených na testování také začalo provádět testování integrace a testování výkonu v sekundárním procesu CI.

Díky nepřetržité integraci jsme mohli rychleji detekovat chyby a uvolňovat kód mnohem rychleji, než jsme to dělali v předchozích letech. Není přehnané říci, že CI zkrotila stranu „buildu“ cyklu build-and-deploy. V dnešní době mnoho vývojových týmů přešlo od CI na CD, což znamená nepřetržité doručování nebo nepřetržité nasazení. Ať už je označení jakékoli, CD je proces, který přesouvá software z odbavení kódu do stagingu nebo dokonce do produkčního nasazení.

Tato splátka Open source projekty Java zavádí nepřetržitou integraci s Jenkinsem, předním automatizačním serverem pro CI / CD. Začneme s přehledem procesu CI a CD, poté nastavíme webový projekt Java pomocí Maven a Jenkins. Naučíte se, jak sestavit a otestovat projekt v Jenkins pomocí JUnit, a také jak řešit chyby sestavení. Budete také instalovat a spouštět několik populárních modulů Jenkins pro testování a vytváření zpráv o statické analýze kódu.

Úvod do CI / CD

V nepřetržitém procesu integrace lze kód, který byl zaevidován do úložiště zdrojového kódu, automaticky vydán, vytvořen, testován různými způsoby a publikován v úložišti. Aby nepřetržitá integrace fungovala, potřebujete server CI, jako je Jenkins, který je schopen monitorovat vaše úložiště zdrojového kódu pro nové změny a reagovat konfigurovatelnými způsoby.

Vezměte si jako příklad aplikaci Java vytvořenou pomocí Mavenu. Při detekci změn kódu může váš server CI reagovat spuštěním a mvn čistá instalace. V typické konfiguraci sestavení Maven by provedl novou sadu testů jednotek jako součást příkazu sestavení. Během vytváření zdrojového kódu mohl server provést libovolný počet dalších akcí:

  • Jakmile složený kód prošel testem jednotky, sloučte větev funkcí zpět do hlavní nebo hlavní větve.
  • Provádějte statickou analýzu kódu, například pokrytí kódu, složitost kódu, kontroly běžných chyb atd.
  • Publikujte své artefakty sestavení do úložiště, například Artifactory nebo Sonatype Nexus
  • Nasazení aplikace do testovacího prostředí integrace
  • Proveďte integrační testy
  • Nasazení aplikace do testovacího prostředí výkonu
  • Proveďte zátěžový test proti vaší aplikaci
  • Nasazení aplikace do prostředí pro uživatelské přijetí (UAT)
  • Nasazení aplikace do výroby

Tyto kroky jsou všechny typy aktivit, které můžete provádět jako součást procesu CI / CD. CI obvykle zahrnuje fáze budování a testování životního cyklu vývoje, zatímco CD rozšiřuje tento proces na nasazení artefaktu sestavení na server pro testování. V některých prostředích jde CD až do produkce.

Kontinuální integrace se obvykle provádí pomocí nástroje, jako je Jenkins, Bamboo nebo TeamCity, který orchestruje vaše kroky sestavení do integračního kanálu. Jenkins je pravděpodobně nejoblíbenější produkt CI / CD a dobře se páruje s Dockerem.

Stáhněte a nainstalujte Jenkins

Jenkins je server pro nepřetržitou integraci a další. Skládá se z automatizačního modulu a ekosystému zásuvných modulů, který podporuje nepřetržitou integraci, automatické testování a nepřetržité doručování. Dodací kanál si přizpůsobíte podle své potřeby.

Existuje mnoho způsobů, jak spustit Jenkins:

  1. Stáhněte soubor WAR a nainstalujte jej do kontejneru servletu v místním počítači.
  2. Nastavte virtuální stroj ve veřejném cloudu, jako je AWS, a hostujte tam Jenkinse.
  3. Využijte poskytovatele cloudu Jenkins, jako je CloudBees.
  4. Nastavit Jenkins v testovací instalaci pomocí Dockeru.

Ukážu vám, jak nastavit lokální instalaci i instalaci testu Docker.

Stáhněte a nainstalujte Jenkins místně

Začněte stažením Jenkins a výběrem verze Long-Term Support (LTS) z domovské stránky Jenkins. Protože používám Mac, instalace automaticky stáhla a bal soubor, který umístil a jenkins.war v mém Aplikace / Jenkins složku. Soubor WAR lze nasadit do libovolného kontejneru servletu.

Budete také chtít stáhnout a nainstalovat Apache Tomcat. V době psaní tohoto článku je nejnovější verze Tomcatu 8.5.4, ale měli byste být schopni spustit jakoukoli nejnovější verzi. Stáhněte si zip nebo tar.gz soubor a dekomprimujte jej na pevný disk. Zkopírujte soubor jenkins.war do Tomcat webové aplikace složku a poté spusťte soubor bin / startup.sh nebo bin / startup.bat soubor. Můžete otestovat, že běží, otevřením prohlížeče na: // localhost: 8080.

Chcete-li spustit Jenkins, otevřete prohlížeč na adrese URL: // localhost: 8080 / jenkins.

Měla by se zobrazit obrazovka, která vypadá jako na obrázku 1.

Steven Haines

Dále Jenkins vytvoří heslo pro správu a zapíše je oběma Tomcatovi logs / catalina.out soubor protokolu a do následujícího domovského adresáře: .jenkins / secrets / initialAdminPassword. Načtěte heslo, zadejte jej do prvku formuláře Heslo pro správu (viz Obrázek 1) a stiskněte Pokračovat. Zobrazí se výzva k instalaci doporučených pluginů nebo výběru pluginů k instalaci. Prozatím doporučuji nainstalovat doporučené doplňky.

Nyní budete vyzváni k vytvoření uživatele správce. Zadejte své uživatelské údaje o správci a stiskněte Uložit a dokončit. Nakonec klikněte Začněte používat Jenkins. Nyní uvidíte domovskou stránku Jenkins, jak je znázorněno na obrázku 2.

Steven Haines

Nakonfigurujte ukázkovou aplikaci pomocí Mavenu

Než můžeme použít Jenkins k vytvoření webového projektu Java s Mavenem, musíme nastavit obě tyto technologie. Jen pod kapotou Jenkins zkontroluje zdrojový kód z úložiště zdrojového kódu do místního adresáře a provede stanovené cíle Maven. Aby to fungovalo, musíte nainstalovat jednu nebo více verzí Mavenu, říct Jenkinsovi, kde jsou nainstalovány, a nakonfigurovat verzi Mavenu, kterou má Jenkins použít při vytváření aplikace.

Na řídicím panelu Jenkins klikněte na Spravujte Jenkinse a vybrat Globální konfigurace nástroje. První věc, kterou uděláme, je konfigurace JDK. V části JDK klikněte na Přidat JDK, pojmenujte jej (moje je „JDK8“) a ponechte výchozí Nainstalujte z java.sun.com kontrolovány. Přijměte licenční smlouvu Oracle a klikněte na odkaz „Zadejte své uživatelské jméno / heslo“. Zadejte své uživatelské jméno a heslo pro Oracle a stiskněte Zavřít. Zobrazí se obrazovka podobná obrázku 3.

Steven Haines

Klepněte na Aplikovat Chcete-li uložit svou práci, přejděte dolů do sekce Maven a klikněte Přidat Maven. Zadejte název pro Maven (moje je „Maven 3.3.9“), ponechejte zaškrtnuté „Instalovat automaticky“ a „Instalovat z Apache“. Klepněte na Uložit až budete připraveni. Měla by se zobrazit obrazovka podobná obrázku 4.

Steven Haines

Git je předkonfigurovaný s Jenkinsem, takže byste nyní měli mít nainstalované všechny nástroje, které potřebujete k pokladně a vytvoření projektu Java z Gitu s Mavenem.

Nainstalujte Jenkins do kontejneru Docker

Pokud nechcete instalovat Jenkins na místní počítač, máte možnost jej spustit v kontejneru Docker. Oficiální obrázek Jenkinse Dockera vám umožní spustit a otestovat instalaci Jenkinse, aniž byste jej skutečně konfigurovali na místním počítači.

Instalace Dockeru

V mém úvodu do Dockeru najdete příručku pro začátečníky v Dockeru, včetně pokynů k instalaci a nastavení.

Za předpokladu, že ve vývojovém prostředí již máte nastavení Dockeru, můžete spustit Jenkinse z příkazového řádku Dockeru:

 docker run -p 8080: 8080 -p 50000: 50000 -v / your / home / jenkins: / var / jenkins_home -d jenkins 

Tento příkaz řekne Dockerovi, aby spustil nejnovější verzi systému Jenkins s následujícími možnostmi:

  • -p 8080: 8080: Mapuje port 8080 na kontejneru Docker na port 8080 na hostiteli Docker, takže se můžete připojit k webové aplikaci Jenkins na portu 8080.
  • -p 50000: 50000: Mapuje port 50000 na kontejneru Docker na port 50000 na hostiteli Docker. Jenkins používá tento port interně, aby umožnil připojeným vykonavatelům sestavení připojit se k hlavnímu serveru Jenkins.
  • -v / your / home / jenkins: / var / jenkins_home: Mapuje úložiště dat Jenkins do místního adresáře, takže můžete restartovat kontejner Docker bez ztráty dat.
  • -d: Umožňuje spustit Docker kontejner v odpojeném režimu nebo jako proces démona.

Následující ukazuje výstup pro spuštění těchto příkazů:

 $ docker run -p 8000: 8080 -v / Users / shaines / jenkins /: / var / jenkins_home -d jenkins cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53 

Protože provozujeme náš Docker kontejner v odpojeném režimu, musíme postupovat podle protokolů, které vydává Jenkins. Můžete tak učinit pomocí docker logs -f příkaz. Stačí zadat prvních několik hexadecimálních čísel ID kontejneru, v tomto případě cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53:

 $ docker logs -f cc1 Spuštěno z: /usr/share/jenkins/jenkins.war webroot: EnvVars.masterEnvVars.get ("JENKINS_HOME") ... ***************** ********************************************** ***** ************************************************ ****** ********************************************* ****************** Je vyžadováno počáteční nastavení Jenkinse. Byl vytvořen uživatel správce a vygenerováno heslo. Pro pokračování v instalaci použijte následující heslo: 205be6fe69c447dd933a3c9ce7420496 Toto lze také najít na: / var / jenkins_home / secrets / initialAdminPassword ************************* *************************************** ************* ************************************************** ** *************************************************** ********* 

Nastavte Jenkins CI pro webovou aplikaci Java

Dále nastavíme jednoduchou úlohu webové aplikace Java v Jenkins. Protože aplikace není pro tento kurz důležitá, použijeme moji jednoduchou ukázkovou aplikaci Hello, World Servlet, kterou jsem hostil na GitHubu.

Aby bylo možné otestovat Jenkinse, budete muset být schopni provést změny v úložišti zdrojového kódu, takže byste nyní měli vytvořit toto úložiště. Na domovské stránce Jenkins klikněte na Vytvářejte nová pracovní místa tlačítko a zadejte název vašeho projektu. Budete vyzváni k výběru typu projektu, jak je znázorněno na obrázku 5.

Steven Haines

Pro tento projekt zvolíme typ projektu Freestyle, ale měli byste si být vědomi svých možností:

  • Freestyle project: Tento nejběžnější typ projektu vám umožňuje sledovat úložiště zdrojového kódu a používat jakýkoli systém sestavení, například Maven a Ant.
  • Potrubí: Tento typ projektu vyberte pro komplikované projekty s pohyblivými částmi, které potřebujete koordinovat napříč několika podřízenými sestaveními.
  • Externí úloha: Použijte toto ke konfiguraci automatizované externí úlohy, kterou chcete sledovat v Jenkins jako součást vašeho sestavení.
  • Projekt s více konfiguracemi: Toto je typ úlohy pro projekty, které vyžadují různé konfigurace pro různá prostředí, například produkční, pracovní a testovací.
  • Složka: Pokud máte komplikované sestavení, možná budete chtít uspořádat věci do složek, z nichž každá má svůj vlastní odlišný jmenný prostor.
  • Vícevětvový kanál: automaticky vytvoří sadu projektů kanálu na základě větví kódu, které jsou definovány ve vašem zdrojovém úložišti kódu

Zadejte název projektu, v tomto případě „hello-world-servlet“, a zvolte „OK“. Dále vyberte Projekt GitHub, pak zadejte adresu URL GitHub vašeho projektu: //github.com/ligado/hello-world-servlet.

V části Správa zdrojového kódu vyberte Git a zadejte stejnou adresu URL projektu.

V části Sestavit spouštěče zvolte Sestavte, když je změna přenesena do GitHubu takže Jenkins vytvoří váš kód kdykoli stisknete změnu na GitHub.

V sekci Sestavit přidejte nový krok sestavení, zvolte Vyvolejte Maven cíle nejvyšší úrovně, vyberte instanci Maven, kterou jste nakonfigurovali dříve (například „Maven 3.3.9“), a zadejte čistá instalace v poli branek. Akce po sestavení zatím nechte prázdné. Po dokončení stiskněte Uložit.

Po návratu na palubní desku byste měli vidět obrazovku podobnou obrázku 6.

Steven Haines

Chcete-li otestovat svou konfiguraci, stiskněte tlačítko Stavět hned tlačítko vedle projektu hello-world-servlet. Měli byste vidět sestavení úspěšně provedené v historii sestavení na levé straně stránky projektu, zobrazené na obrázku 7.

Steven Haines

Chcete-li přesně zjistit, co se stalo, klikněte na sestavení a poté klikněte na Výstup konzoly, který vám ukáže všechny kroky, které Jenkins provedl, a jejich výsledky. Výstup konzoly je níže.

$config[zx-auto] not found$config[zx-overlay] not found