Zápis Jenkinsovho doplnku
1. Prehľad
Jenkins je server kontinuálnej integrácie typu open-source, ktorý umožňuje vytvoriť vlastné vytvorenie doplnku pre konkrétnu úlohu / prostredie.
V tomto článku prejdeme celým procesom vytvárania rozšírenia, ktoré do výstupu zostavy pridáva štatistiku, konkrétne počet tried a riadkov kódu.
2. Inštalácia
Prvá vec, ktorú musíte urobiť, je pripraviť projekt. Našťastie Jenkins poskytuje pohodlné archetypy Maven pre to.
Stačí spustiť príkaz uvedený nižšie z shellu:
archív typu mvn: generate -Dfilter = io.jenkins.archetypes: plugin
Dostaneme nasledujúci výstup:
[INFO] Generovanie projektu v interaktívnom režime [INFO] Nie je definovaný žiadny archetyp. Pomocou maven-archetype-quickstart (org.apache.maven.archetypes: maven-archetype-quickstart: 1.0) Vyberte archetyp: 1: remote -> io.jenkins.archetypes: empty-plugin (Kostra Jenkinsovho pluginu s POM a prázdny zdrojový strom.) 2: remote -> io.jenkins.archetypes: global-configuration-plugin (Kostra Jenkinsovho pluginu s POM a ukážka globálnej konfigurácie.) 3: remote -> io.jenkins.archetypes : hello-world-plugin (Kostra Jenkinsovho pluginu s POM a príkladom kroku zostavenia.)
Teraz vyberte prvú možnosť a definujte skupinu / artefakt / balík v interaktívnom režime. Potom je potrebné vylepšiť pom.xml - pretože obsahuje položky ako Plugin TODO.
3. Návrh doplnku Jenkins
3.1. Predĺženie bodov
Jenkins poskytuje množstvo rozširujúcich bodov. Jedná sa o rozhrania alebo abstraktné triedy, ktoré definujú zmluvy pre konkrétne prípady použitia a umožňujú ich implementáciu iným doplnkom.
Napríklad každé zostavenie pozostáva z množstva krokov, napr. „Pokladňa z VCS“, „Zostaviť“, „Test“,„Zostaviť“, atď. Jenkins definuje hudson.tasks.BuildStep bod rozšírenia, takže ho môžeme implementovať tak, aby poskytoval vlastný krok, ktorý je možné nakonfigurovať.
Ďalším príkladom je hudson.tasks.BuildWrapper - to nám umožňuje definovať akcie pred / po.
Máme tiež vedľajší doplnok e-mailu, ktorý definuje hudson.plugins.emailext.plugins.RecipientProvider bod rozšírenia, ktorý umožňuje poskytovanie príjemcov e-mailov. Príklad implementácie je k dispozícii tu: hudson.plugins.emailext.plugins.recipients.UpstreamComitterRecipientProvider.
Poznámka: Existuje starší prístup, pri ktorom je potrebné rozšíriť triedu doplnkov hudson.Plugin. Avšak teraz sa odporúča použiť namiesto nich predĺženie.
3.2. Inicializácia pluginu
Je potrebné povedať Jenkinsovi o našom rozšírení a o tom, ako by malo byť vytvorené.
Najskôr definujeme statickú vnútornú triedu v rámci pluginu a označíme ju pomocou hudson.Rozšírenie anotácia:
class MyPlugin extends BuildWrapper {@Extension public static class DescriptorImpl extends BuildWrapperDescriptor {@Override public boolean isApplicable (AbstractProject item) {return true; } @Override public String getDisplayName () {return "name to show in UI"; }}}
Po druhé, musíme definovať konštruktor, ktorý sa má použiť na inštanciu objektu doplnku, a označiť ho org.kohsuke.stapler.DataBoundConstructor anotácia.
Je možné na to použiť parametre. Zobrazujú sa v používateľskom rozhraní a automaticky ich dodáva spoločnosť Jenkins.
Napr. zvážte plugin Maven:
@DataBoundConstructor public Maven (ciele reťazca, názov reťazca, reťazec pom, vlastnosti reťazca, reťazec jvmOptions, boolean usePrivateRepository, nastavenie SettingsProvider, GlobalSettingsProvider globalSettings, boolean injectBuildVariables) {...}
Je namapovaná na nasledujúce používateľské rozhranie:
Je tiež možné použiť org.kohsuke.stapler.DataBoundSetter anotácia so staviteľmi.
4. Implementácia pluginu
Počas zostavovania chceme zhromaždiť základné štatistiky projektu, takže hudson.tasks.BuildWrapper je správna cesta sem.
Poďme to implementovať:
trieda ProjectStatsBuildWrapper rozširuje BuildWrapper {@DataBoundConstructor public ProjectStatsBuildWrapper () {} @Override public Environment setUp (AbstractBuild build, Launcher launcher, BuildListener listener) {} @Extension public static class DescriptorImpl extends BuildWrapperDescriptor {@Override pravda; } @Nonnull @Override public String getDisplayName () {return "Vytvoriť štatistiku projektu počas zostavovania"; }}}
Dobre, teraz musíme implementovať skutočnú funkčnosť.
Definujme triedu domény pre štatistiku projektu:
trieda ProjectStats {private int classesNumber; private int linesNumber; // štandardné konštruktory / getre}
A napíš kód, ktorý vytvára dáta:
private ProjectStats buildStats (FilePath root) throws IOException, InterruptedException {int classesNumber = 0; int linesNumber = 0; Stack toProcess = nový Stack (); toProcess.push (root); while (! toProcess.isEmpty ()) {cesta k FilePath = toProcess.pop (); if (path.isDirectory ()) {toProcess.addAll (path.list ()); } else if (path.getName (). endsWith (". java")) {classesNumber ++; linesNumber + = countLines (cesta); }} vrátiť nové ProjectStats (classesNumber, linesNumber); }
Nakoniec musíme štatistiku ukázať koncovým používateľom. Vytvorme pre to šablónu HTML:
$ PROJECT_NAME $ Projekt $ PROJECT_NAME $: Počet tried Číslo riadku $ CLASSES_NUMBER $ $ LINES_NUMBER $
A vyplňte ho počas zostavovania:
public class ProjectStatsBuildWrapper rozširuje BuildWrapper {@Override public Environment setUp (AbstractBuild build, Launcher launcher, BuildListener listener) {return new Environment () {@Override public boolean tearDown (AbstractBuild build, BuildListener listener) hodí IOException, InterruptedException {ProjectStats statistics = buildStats build.getWorkspace ()); Reťazcový report = generateReport (build.getProject (). GetDisplayName (), stats); Súbor artifactsDir = build.getArtifactsDir (); Cesta reťazca = artifactsDir.getCanonicalPath () + REPORT_TEMPLATE_PATH; Súbor reportFile = nový súbor ("cesta"); // zapíše text správy do súboru správy}}; }}
5. Použitie
Je čas spojiť všetko, čo sme doteraz vytvorili - a vidieť to v praxi.
Predpokladá sa, že Jenkins je v lokálnom prostredí funkčný. Inak si prečítajte podrobnosti o inštalácii.
5.1. Pridajte doplnok k Jenkinsovi
Poďme si teraz zostaviť náš doplnok:
inštalácia mvn
Týmto sa vytvorí * .hpi súbor v cieľ adresár. Musíme to skopírovať do adresára Jenkinsových doplnkov (~ / .jenkins / plugin predvolene):
cp ./target/jenkins-hello-world.hpi ~ / .jenkins / plugins /
Nakoniec reštartujeme server a uistite sa, že je doplnok použitý:
- Otvorte informačný panel CI na adrese // localhost: 8080
- Prejdite na Spravujte Jenkinsa | Spravovať doplnky | Nainštalované
- Nájdite náš doplnok
5.2. Nakonfigurujte Jenkins Job
Vytvorme novú prácu pre open-source projekt Apache commons-lang a nakonfigurujme tam cestu k jeho Git repo:
Na to musíme tiež povoliť náš doplnok:
5.3. Skontrolujte výsledky
Teraz sme všetci pripravení, poďme skontrolovať, ako to funguje.
Môžeme zostaviť projekt a prejsť k výsledkom. Môžeme vidieť, že a stats.html súbor je k dispozícii tu:
Poďme to otvoriť:
To sme očakávali - jediná trieda, ktorá má tri riadky kódu.
6. Záver
V tomto návode sme vytvorili a Jenkins plugin od nuly a zabezpečil jeho funkčnosť.
Prirodzene, nepokryli sme všetky aspekty vývoja rozšírení CI, poskytli sme iba základný prehľad, návrhové nápady a počiatočné nastavenie.
A ako vždy, zdrojový kód nájdete na GitHub.