Een taak plannen in Jenkins

1. Inleiding

In dit artikel bespreken we verschillende manieren om taken in Jenkins te plannen.

We beginnen met het plannen van een eenvoudige taak die zoiets eenvoudigs doet als het afdrukken van een gewoon tekstbericht. En we zullen het voorbeeld evolueren naar het plannen van een taak die automatisch wordt geactiveerd door wijzigingen in een SCM-repository zoals GitHub, Bitbucket, enz.

2. Eerste installatie

We gaan ervan uit dat JDK en Maven zijn geïnstalleerd in Algemene toolconfiguratie met namen als JDK9.0.1 en Maven3.5.2respectievelijk op de Jenkins-server.

Het gaat er ook van uit dat we hebben toegang tot een SCM-repository zoals Bitbucket met een correct opgezet Maven-project.

3. Een eenvoudige taak plannen

Laten we op de taakconfiguratiepagina rechtstreeks naar het Bouw triggers sectie. Aangezien we van plan zijn om een ​​eenvoudige taak te creëren, laten we het aangevinkte selectievakje aanvinken Bouw regelmatig. Zodra we dit selectievakje aanvinken, wordt een tekstvak weergegeven met de Schema etiket.

We moeten waarde leveren in een Cron-compatibel formaat. Er is uitgebreide informatie beschikbaar op de pagina als we op het vraagteken naast het vak klikken.

Laten we typen */2 * * * * hier, wat een interval van twee minuten vertegenwoordigt:

Als we uit het tekstvak tikken, zien we informatie direct onder het vak. Het vertelt ons wanneer de volgende taak zal worden uitgevoerd.

Laten we de taak opslaan - over ongeveer twee minuten zouden we de status van de eerste uitvoering van de taak moeten zien:

Omdat we de taak zo hebben geconfigureerd dat deze elke twee minuten wordt uitgevoerd, zouden we na enige tijd wachten meerdere buildnummers moeten zien wanneer we teruggaan naar het taakdashboard.

4. Een taak maken die SCM peilt

Laten we een stap vooruit gaan en een taak maken die de broncode uit de SCM-repository zoals Bitbucket haalt en een build uitvoert.

Laten we een nieuwe job aanmaken zoals uitgelegd in de vorige sectie, met een paar aanpassingen.

In de Bouw triggers sectie, in plaats van te selecteren Bouw regelmatig, laten we selecteren Enquête SCM. Zodra we dat doen, zouden we een tekstvak met Label moeten zien Schema.

Laten we typen */5 * * * * in dit vak, wat betekent dat we willen plannen dat de taak elke 5 minuten wordt uitgevoerd:

Laten we naar boven scrollen Broncodebeheer sectie. Na het selecteren van het keuzerondje naast Git, verschijnt er een nieuwe sectie met het label Opslagplaatsen.

Dit is waar we de details van onze SCM-repository moeten configureren. Laten we de URL van de SCM-repository typen in het Repository-URL tekstveld:

We moeten ook gebruikersreferenties opgeven zodat Jenkins toegang heeft tot de repository.

Laten we op de Toevoegen naast Inloggegevens, waarmee een pop-upscherm wordt weergegeven om de gebruikersgegevens te maken.

Laten we de Soort net zo Gebruikersnaam met wachtwoord. We moeten de gebruikersnaam en het wachtwoord typen in de daarvoor bestemde tekstvelden:

Bij een klik op Toevoegen knop, we worden teruggebracht naar de Broncodebeheer sectie.

Laten we deze gebruikersreferentie selecteren in de vervolgkeuzelijst naast Inloggegevens:

Nu is het laatste wat we moeten doen, het opzetten van het build-script.

Laten we naar beneden scrollen Bouwen sectie, klik op Bouwstap toevoegen en selecteer Voer Shell uit. Omdat we werken aan een Maven-project in de SCM-repository, we moeten typen mvn schone installatie, die een Maven-build zal uitvoeren.

Laten we proberen te begrijpen wat we hier hebben gedaan.

We hebben een taak gemaakt die elke 5 minuten moet worden uitgevoerd. De taak is geconfigureerd om de broncode op te halen uit de hoofdtak van de gegeven Bitbucket-repository.

Het zal de verstrekte gebruikersreferenties gebruiken om in te loggen op Bitbucket.

Na het ophalen van de broncode, zal de taak het script uitvoeren met een opgegeven Maven-commando.

Als we nu opslaan en ongeveer vijf minuten wachten, zouden we de build-uitvoering in Bouw geschiedenis op sectie op het jobdashboard.

De Console-uitgang zou de uitvoer van de Maven-build moeten tonen. We kunnen in de console-uitvoer zien dat de broncode uit Bitbucket en het commando is gehaald mvn schone installatie is uitgevoerd:

Omdat het een Maven-build is, de console-uitvoer kan erg lang zijn, afhankelijk van het aantal Maven-afhankelijkheden dat wordt gedownload.

Maar aan het einde van de uitvoer zouden we moeten zien BOUW SUCCES bericht.

5. Een taak maken die Pipeline als script gebruikt

Tot nu toe hebben we gezien hoe we taken kunnen creëren die op het vooraf gedefinieerde geplande tijdstip worden uitgevoerd.

Laten we nu een taak creëren die niet aan een bepaald schema is gebonden. In plaats daarvan zullen we het zo configureren dat het automatisch wordt geactiveerd wanneer er een nieuwe commit in de SCM-repository is.

Laten we teruggaan naar het Jenkins-dashboard Nieuw item. Deze keer in plaats van Freestyle-project, we zullen selecteren Pijpleiding. Laten we deze baan een naam geven PipelineAsScriptJob.

Nadat u op de knop OK hebt geklikt, worden we naar de pijplijnconfiguratiepagina geleid. Deze pagina heeft verschillende secties, zoals 'Algemeen", “Bouw triggers ', “Geavanceerde projectopties ', en "Pijpleiding".

Laten we naar beneden scrollen naar 'Bouw triggers ' sectie en het selectievakje naast Bouw wanneer een wijziging naar Bitbucket wordt gepusht. Deze optie is alleen beschikbaar als we de Bitbucket-plug-in hebben geïnstalleerd:

Laten we naar beneden scrollen Pijpleiding sectie. We moeten selecteren Pipeline Script in de vervolgkeuzelijst naast Definitie.

Het tekstvak net onder deze vervolgkeuzelijst wacht tot het script wordt geplaatst. Er zijn twee manieren om dit te doen.

We kunnen het hele script typen of we kunnen gebruik maken van een hulpprogramma van Jenkins, dat bekend staat als Pipeline-syntaxis.

Laten we de tweede optie kiezen:

Bij een klik op Pipeline-syntaxis, zoals aangegeven in het bovenstaande diagram, wordt een nieuw tabblad geopend in de browser. Dit is een handig hulpprogramma waarmee we de bewerking kunnen specificeren die we willen uitvoeren, en de tool genereert het script in Groovy voor ons. We kunnen dan het script kopiëren en in de pijplijnconfiguratie plakken.

Laten we selecteren afrekenen: General SCM in de Voorbeeldstap laten vallen. Nadat we de SCM Repo-URL en gebruikersreferenties hebben opgegeven, moeten we op het Genereer Pipeline Script knop.

Dit genereert het script in het tekstvak:

Laten we dit script kopiëren en ergens opslaan voor later gebruik.

Laten we op dezelfde pagina omhoog scrollen en selecteren withMaven: Zorg voor een Maven-omgeving in de Voorbeeldstap laten vallen. Dat moet hier worden opgemerkt deze optie is alleen beschikbaar als de Pipeline Maven Integration Plugin is geïnstalleerd.

We moeten de namen van Maven- en JDK-installaties selecteren naast de bijbehorende vervolgkeuzelijsten. We moeten op het Genereer Pipeline Script knop.

Dit genereert het script in het tekstvak:

Laten we het script bewaren.

Er zijn nog een paar scripts die we moeten genereren. Laten we selecteren knooppunt: wijs knooppunt toe in de Voorbeeldstap laten vallen, type meester in de Etiket tekstveld en klik Genereer Pipeline Script:

Laten we het script bewaren.

En de laatste.

Laten we selecteren stage: Stage in de Voorbeeldstap vervolgkeuzelijst, typ scm in de Artiestennaam tekstveld en klik Genereer Pipeline Script:

Laten we het redden.

Het is tijd om alle scripts die tot nu toe zijn gegenereerd te verzamelen en ze aan elkaar te naaien:

node ('master') {stage ('scm') {checkout ([$ class: 'GitSCM', branches: [[name: '* / master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [ ], userRemoteConfigs: [[credentialsId: 'e50f564f-fbb7-4660-9c95-52dc93fa26f7', url: '// [email protected] /projects/springpocrepo.git']]])} stage ('build') {withMaven ( jdk: 'JDK9.0.1', maven: 'Maven3.5.2') {sh 'mvn schone installatie'}}}

De eerste verklaring, knooppunt (‘master ') in het bovenstaande script, geeft aan dat de taak zal worden uitgevoerd op een knooppunt met de naam meester, het standaardknooppunt op de Jenkins-server.

Laten we het bovenstaande script kopiëren naar het tekstvak in Pijpleiding sectie:

Laten we deze configuratie opslaan.

Nu, er is maar één ding dat is weggelaten. We moeten een webhook configureren in Bitbucket. De Webhook is verantwoordelijk voor het verzenden van een pushmelding naar de Jenkins-server, telkens wanneer een bepaalde gebeurtenis plaatsvindt in Bitbucket.

Laten we eens kijken hoe we het kunnen configureren.

Laten we inloggen op Bitbucket en een repository selecteren. We zouden een optie moeten zien Instellingen op de linkerkolom. Laten we erop klikken en we zouden een optie moeten zien Webhooks in WERKSTROOM sectie. Laten we een nieuwe webhook maken.

We moeten deze webhook een naam geven in het Titel veld. We moeten ook een URL voor de webhook in het URL veld. Deze URL moet verwijzen naar een bepaald REST API-eindpunt geleverd door Jenkins, en dat eindpunt is bitbucket-haak.

Opgemerkt moet worden dat de URL MOET eindigen met een schuine streep aan het einde:

Bij het configureren van de Webhook hierboven hebben we een optie geselecteerd Repository push. Dit betekent dat Bitbucket een melding naar de Jenkins-server stuurt wanneer er een push plaatsvindt.

Dit gedrag kan worden gewijzigd; er zijn verschillende opties om uit te kiezen.

Laten we voorlopig de standaardoptie kiezen, d.w.z. Repository-push.

We kunnen ook webhook in Github instellen; hier vindt u nuttige informatie over hoe u dat kunt configureren.

Om een ​​lang verhaal kort te maken: we hebben een pijplijnscript gemaakt in de taal van Groovy - dat zou de broncode uit de master branch moeten halen van de verstrekte SCM-repository (met behulp van de verstrekte gebruikersreferenties), telkens wanneer er een push in de repository is en dan uitvoeren mvn schone installatie commando op de Jenkins-server.

Opgemerkt moet worden dat deze taak op een bepaald moment niet zal worden uitgevoerd. In plaats daarvan zal het wachten tot er een push is in de master branch van de SCM repository.

Zodra er een nieuwe push-gebeurtenis is, zien we een nieuwe uitvoering in het "Bouwgeschiedenis" sectie op het Jenkins-taakdashboard.

We zouden een nieuwe build moeten zien die wordt gestart met een in afwachting status ernaast.

Binnen een paar seconden zou deze build moeten beginnen met uitvoeren en we zullen de volledige login kunnen zien Console-uitgang.

De eerste instructie in de console-uitvoer zegt "Gestart door Bitbucket push by .." - dit betekent dat de build automatisch werd geactiveerd toen er een push plaatsvond in Bitbucket:

Als alles goed gaat, zou de build met succes moeten worden voltooid.

6. Maak een taak die Jenkinsfile gebruikt

Het is mogelijk om GEEN script in de Jenkins-pijplijn te schrijven en toch de uitvoering van de build te bereiken die wordt geactiveerd door de Bitbucket Webhook.

Om dit te doen, we moeten een nieuw bestand maken in Bitbucket en het een naam geven als Jenkinsfile. Het pijplijnscript moet met een kleine wijziging naar dit Jenkins-bestand worden overgebracht. Laten we eens kijken hoe we dat precies moeten doen.

We maken een nieuwe pijplijn in Jenkins en geven deze een naam PipelineWithJenkinsfile.

Op de pijplijnconfiguratiepagina selecteren we Pipeline-script van SCM naast Definitie in de Pijpleiding sectie. We zien een vervolgkeuzelijst met verschillende opties naast SCM. Laten we kiezen Git uit de vervolgkeuzelijst.

We moeten dan de URL van de Bitbucket-repository en gebruikersreferenties opgeven. Laten we ervoor zorgen het tekstveld naast Scriptpad bevat de standaardwaarde, d.w.z. Jenkinsfile:

Wat Jenkins betreft, is dat alles wat we nodig hebben om te configureren.

We moeten echter het Jenkins-bestand in de repository maken; dus laten we een nieuw tekstbestand maken, het Jenkinsfile noemen en dit eenvoudige groovy script gebruiken:

node ('master') {stage ('scm') {checkout scm} stage ('build') {withMaven (jdk: 'JDK9.0.1', maven: 'Maven3.5.2') {sh 'mvn clean install'} }}

Dit script is bijna hetzelfde als het pijplijnscript dat we in de eerdere sectie hebben gemaakt, met slechts één wijziging. De verklaring in stage (‘scm ') heeft de URL en gebruikersgegevens niet nodig. In plaats daarvan is alles wat het nodig heeft kassa scm.

En dat is het. Op het moment dat we dit bestand in Bitbucket vastleggen, wordt de build in Jenkins geactiveerd - en we zouden moeten zien dat de build wordt geactiveerd in het Bouw geschiedenis op.

Het enige verschil tussen deze sectie en de eerdere is dat we hebben het pijplijnscript gedefinieerd in de Bitbucket-repository.

Zo, het build-script maakt deel uit van de broncode van het te bouwen project. We onderhouden het script niet in Jenkins zelf.

In plaats daarvan heeft Jenkins kennis van de SCM-repositorydetails en het scriptbestand. Elke keer dat er een push naar deze repository is, wordt het script in Jenkinsfile wordt uitgevoerd op de Jenkins-server.

7. Conclusie

In deze zelfstudie hebben we gezien hoe taken kunnen worden geconfigureerd en gepland in Jenkins met behulp van verschillende strategieën.

We hebben ook gezien hoe u een taak in Jenkins zo configureert dat deze automatisch wordt geactiveerd, op basis van bepaalde acties die worden uitgevoerd in de SCM-repository, zoals Bitbucket.