Planen eines Jobs in Jenkins

Einen Job in Jenkins einplanen

1. Einführung

In diesem Artikel werden verschiedene Möglichkeiten zum Planen von Jobs in Jenkins behandelt.

Wir beginnen mit der Planung eines einfachen Auftrags, der so einfach wie das Drucken einer Nur-Text-Nachricht ausgeführt wird. Das Beispiel wird dahingehend weiterentwickelt, dass ein Job geplant wird, der automatisch durch Änderungen in einem SCM-Repository wie GitHub, Bitbucket usw. ausgelöst wird.

2. Ersteinrichtung

Wir nehmen an, dassJDK and Maven have been installed in Global Tool Configuration with names as JDK9.0.1 and Maven3.5.2 auf dem Jenkins-Server sind.

Es wird auch davon ausgegangen, dasswe’ve got access to an SCM repository wie Bitbucket mit einem Maven-Projekt ordnungsgemäß eingerichtet sind.

3. Planen eines einfachen Jobs

Scrollen wir auf der Jobkonfigurationsseite direkt zum AbschnittBuild Triggers. Da wir beabsichtigen, einen einfachen Job zu erstellen, aktivieren wir das KontrollkästchenBuild periodically. Sobald wir dieses Kontrollkästchen aktivieren, wird ein Textfeld mit der BezeichnungScheduleangezeigt.

We have to provide value in a Cron-compliant format. Auf der Seite finden Sie umfangreiche Informationen, wenn Sie auf das Fragezeichen neben dem Feld klicken.

Geben Sie hier*/2 * * * * ein, was einem Intervall von zwei Minuten entspricht:

image

 

Wenn Sie das Textfeld verlassen, werden Informationen direkt unter dem Feld angezeigt. Hier erfahren wir, wann der Job das nächste Mal ausgeführt wird.

Speichern wir den Job - in ungefähr zwei Minuten sollte der Status der ersten Ausführung des Jobs angezeigt werden:

image

Da wir den Job so konfiguriert haben, dass er alle zwei Minuten ausgeführt wird, sollten mehrere Build-Nummern angezeigt werden, wenn wir nach einiger Zeit zum Job-Dashboard zurückkehren.

4. Erstellen eines Jobs, der SCM abfragt

Lassen Sie uns einen Schritt vorwärts gehen und einen Job erstellen, der den Quellcode aus dem SCM-Repository wie Bitbucket abruft und einen Build ausführt.

Erstellen wir einen neuen Job, wie im vorherigen Abschnitt erläutert, mit einigen Änderungen.

Im AbschnittBuild Triggers wirdinstead of selecting Build Periodically, let’s select Poll SCM. Sobald wir das tun, sollten wir ein Textfeld mit der BezeichnungSchedule sehen.

Geben Sie*/5 * * * * in dieses Feld ein. Dies bedeutet, dass der Job alle 5 Minuten ausgeführt werden soll:

image

Scrollen wir zum AbschnittSource Code Management. Wenn Sie das Optionsfeld nebenGit auswählen, wird ein neuer Abschnitt mit der BezeichnungRepositories angezeigt.

This is where we need to configure details of our SCM repository. Geben Sie die URL des SCM-Repositorys in das TextfeldRepository URLein:

image

Wir müssen auch Benutzeranmeldeinformationen bereitstellen, damit Jenkins auf das Repository zugreifen kann.

Klicken Sie auf die SchaltflächeAdd neben Anmeldeinformationen. Daraufhin wird ein Popup-Bildschirm zum Erstellen der Benutzeranmeldeinformationen angezeigt.

Wählen wirKind alsUsername with Password aus. Wir müssen den Benutzernamen und das Passwort in die angegebenen Textfelder eingeben:

image

Wenn Sie auf die SchaltflächeAddklicken, kehren Sie zum AbschnittSource Code Managementzurück.

Wählen Sie diesen Benutzerausweis in der Dropdown-Liste nebenCredentials aus:

image

Als letztes müssen wir das Build-Skript einrichten.

Scrollen wir zum AbschnittBuild, klicken Sie aufAdd build step und wählen SieExecute Shell aus. Da wir an einem Maven-Projekt im SCM-Repository arbeiten,we need to type mvn clean install, which will perform a Maven build.

Versuchen wir zu verstehen, was wir hier getan haben.

Wir haben einen Job erstellt, der alle 5 Minuten ausgeführt werden soll. The job’s been configured to pull source code from the master branch of the given Bitbucket repository.

Es verwendet die angegebenen Benutzeranmeldeinformationen, um sich bei Bitbucket anzumelden.

Nach dem Abrufen des Quellcodes führt der Job das Skript aus, das einen bereitgestellten Maven-Befehl enthält.

Wenn wir nun ungefähr fünf Minuten speichern und warten, sollte die Build-Ausführung im AbschnittBuild Historyim Job-Dashboard angezeigt werden.

DieConsole Output sollten die Ausgabe des Maven-Builds anzeigen. In der Konsolenausgabe sehen wir, dass der Quellcode aus Bitbucket abgerufen und der Befehlmvn clean install ausgeführt wurde:

image

Da es sich um einen Maven-Build handelt, werdenthe console output might be very long depending on the number of Maven dependencies that are downloaded.

Am Ende der Ausgabe sollte jedoch die NachrichtBUILD SUCCESSangezeigt werden.

5. Erstellen eines Jobs, der Pipeline als Skript verwendet

Bisher haben wir gesehen, wie Jobs erstellt werden, die zum vordefinierten geplanten Zeitpunkt ausgeführt werden.

Jetzt erstellen wir einen Job, der nicht an einen bestimmten Zeitplan gebunden ist. Stattdessen konfigurieren wir es so, dass es automatisch ausgelöst wird, wenn ein neues Commit im SCM-Repository vorhanden ist.

Kehren Sie zum Jenkins-Dashboard zurück und klicken Sie aufNew Item. Dieses Mal wählen wir anstelle vonFreestyle projectPipeline aus. Nennen wir diesen JobPipelineAsScriptJob.

Wenn Sie auf OK klicken, werden Sie zur Pipeline-Konfigurationsseite weitergeleitet. Diese Seite enthält mehrere Abschnitte wie „General”“, „Build Triggers”“, „Advanced Project Options”“ und „Pipeline”.

Scrollen wir nach unten zum Abschnitt "Build Triggers”" und aktivieren Sie das Kontrollkästchen neben "Build when a change is pushed to Bitbucket". This option will be available only if we’ve installed the Bitbucket Plugin:

image

Scrollen wir nach unten zum AbschnittPipeline. Wir müssenPipeline Script in der Dropdown-Liste nebenDefinition auswählen.

Das Textfeld direkt unter diesem Dropdown wartet darauf, dass das Skript eingefügt wird. Es gibt zwei Möglichkeiten, dies zu tun.

Wir können entweder das gesamte Skript oderwe can make use of a utility provided by Jenkins, which is known as Pipeline Syntax eingeben.

Wählen wir die zweite Option:

image

Beim Klicken aufPipeline Syntax wird, wie im obigen Diagramm hervorgehoben, eine neue Registerkarte im Browser geöffnet. Dies ist ein praktisches Dienstprogramm, mit dem wir die Operation angeben können, die wir ausführen möchten, undthe tool will generate the script in Groovy für uns. Anschließend können wir das Skript kopieren und in die Pipeline-Konfiguration einfügen.

Wählen Siecheckout: General SCM in der Dropdown-ListeSample Step aus. Nachdem Sie die SCM-Repo-URL und die Benutzeranmeldeinformationen angegeben haben, müssen Sie auf die SchaltflächeGenerate Pipeline Script klicken.

Dies generiert das Skript im Textfeld:

image

Kopieren wir dieses Skript und speichern es zur späteren Verwendung.

Scrollen Sie auf derselben Seite nach oben und wählen SiewithMaven: Provide Maven environment in der Dropdown-ListeSample Step aus. Hierbei ist zu beachten, dassthis option will be available only if Pipeline Maven Integration Plugin is installed.

Wir müssen die Namen der Maven- und JDK-Installationen neben den entsprechenden Dropdown-Listen auswählen. Wir müssen auf die SchaltflächeGenerate Pipeline Script klicken.

Dies generiert das Skript im Textfeld:

image

Speichern wir das Skript.

Es gibt noch ein paar weitere Skripte, die wir generieren müssen. Wählen Sienode: Allocate node in der Dropdown-ListeSample Step, Typmaster im TextfeldLabel aus und klicken Sie aufGenerate Pipeline Script:

image

Speichern wir das Skript.

Und der letzte.

Wählen Siestage: Stage in der Dropdown-ListeSample Step aus, geben Siescm in das TextfeldStage Name ein und klicken Sie aufGenerate Pipeline Script:

image

Speichern wir es.

Es ist Zeit, alle bisher generierten Skripte zusammenzustellen und zusammenzufügen:

node('master') {
    stage('scm') {
        checkout([$class: 'GitSCM',
          branches: [[name: '*/master']],
          doGenerateSubmoduleConfigurations: false,
          extensions: [],
          submoduleCfg: [],
          userRemoteConfigs: [[credentialsId: 'e50f564f-fbb7-4660-9c95-52dc93fa26f7',
          url: 'https://[email protected]/projects/springpocrepo.git']]])
    }

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

Die erste Anweisung,node(‘master') im obigen Skript,indicates that the job will be executed on a node named master, ist der Standardknoten auf dem Jenkins-Server.

Kopieren Sie das obige Skript in das Textfeld im AbschnittPipeline:

image

Speichern wir diese Konfiguration.

Jetzt bleibt nur eines aus. Wir müssen einen Webhook in Bitbucket konfigurieren. The Webhook is responsible for sending out a push notification to Jenkins server, whenever a particular event takes place in Bitbucket.

Schauen wir uns an, wie Sie es konfigurieren.

Melden Sie sich bei Bitbucket an und wählen Sie ein Repository aus. In der linken Spalte sollte eine OptionSettings angezeigt werden. Klicken wir darauf und wir sollten eine OptionWebhooks im AbschnittWORKFLOW sehen. Erstellen wir einen neuen Webhook.

Wir müssen diesem Webhook im FeldTitleeinen Namen geben. Wir müssen auch eine URL für den Webhook im FeldURL angeben. Diese URL muss auf einen bestimmten von Jenkins bereitgestellten REST-API-Endpunkt verweisen, und dieser Endpunkt istbitbucket-hook.

It must be noted that the URL MUST end with a trailing slash:

image

 

Bei der Konfiguration des obigen Webhooks haben wir die OptionRepository push ausgewählt. This means Bitbucket will send a notification to Jenkins server whenever a push happens.

Dieses Verhalten kann geändert werden. Es stehen verschiedene Optionen zur Auswahl.

Lassen Sie uns zunächst die Standardoption verwenden, d. H.Repository Push.

We can setup webhook in Github, too; hereenthält einige hilfreiche Informationen zur Konfiguration.

Lange Rede, kurzer Sinn: Wir haben ein Pipeline-Skript in der Sprache Groovy erstellt -that should pull the source code from the master branch des bereitgestellten SCM-Repositorys (unter Verwendung der angegebenen Benutzeranmeldeinformationen),whenever there’s a push in the repository und dannexecute mvn clean install command on the Jenkins server.

Es ist zu beachten, dass dieser Job zu einem bestimmten Zeitpunkt nicht ausgeführt wird. Stattdessen wird gewartet, bis ein Push im Hauptzweig des SCM-Repositorys erfolgt.

Sobald es ein neues Push-Ereignis gibt, wird im Abschnitt“Build History”im Jenkins-Job-Dashboard eine neue Ausführung angezeigt.

Wir sollten sehen, dass ein neuer Build mit dem Statuspendingdaneben initiiert wird.

In wenigen Sekunden sollte dieser Build mit der Ausführung beginnen, und wir können das vollständige Protokoll inConsole Output anzeigen.

The first statement in the console output says “Started by Bitbucket push by..” – bedeutet, dass der Build automatisch ausgelöst wurde, als ein Push in Bitbucket stattfand:

image

 

Wenn alles gut geht, sollte der Build erfolgreich abgeschlossen werden.

6. Erstellen Sie einen Job, der Jenkinsfile verwendet

Es ist möglich, KEIN Skript in die Jenkins-Pipeline zu schreiben und dennoch eine Build-Ausführung zu erreichen, die vom Bitbucket-Webhook ausgelöst wird.

Dazuwe have to create a new file in Bitbucket and name it as Jenkinsfile. Das Pipeline-Skript muss mit einer geringfügigen Änderung in diese Jenkins-Datei übertragen werden. Mal sehen, wie das geht.

Wir werden eine neue Pipeline in Jenkins erstellen und siePipelineWithJenkinsfile nennen.

Auf der Pipeline-Konfigurationsseite wählen wirPipeline script from SCM nebenDefinition im AbschnittPipeline aus. NebenSCM wird ein Dropdown-Menü mit verschiedenen Optionen angezeigt. Wählen SieGit aus der Dropdown-Liste.

Anschließend müssen wir die URL des Bitbucket-Repositorys und die Benutzeranmeldeinformationen angeben. Stellen wir sicher, dassthe text field next to Script Path contains the default value,i.e., Jenkinsfile:

image

 

Für Jenkins ist dies alles, was wir konfigurieren müssen.

Wir müssen jedoch die Jenkins-Datei im Repository erstellen. Erstellen wir also eine neue Textdatei, nennen sie Jenkinsfile und verwenden dieses einfache, groovige Skript:

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

Dieses Skript ist fast dasselbe wie das Pipeline-Skript, das wir im vorherigen Abschnitt erstellt haben, mit nur einer Änderung. Die Anweisung instage(‘scm') benötigt keine URL- und Benutzeranmeldeinformationen. Stattdessen ist nurcheckout scm erforderlich.

Und das ist es. The moment we commit this file into Bitbucket, it’ll trigger the build in Jenkins - und wir sollten sehen, dass der Build inBuild History ausgelöst wird.

Der einzige Unterschied zwischen diesem und dem früheren Abschnitt besteht darin, dasswe defined the pipeline script in the Bitbucket repository.

Alsothe build script is part of the source code of the project that needs to be built. Wir pflegen das Skript nicht in Jenkins.

Stattdessen kennt Jenkins die SCM-Repository-Details und die Skriptdatei. Whenever there is a push to this repository, the script in Jenkinsfile gets executed on the Jenkins server.

7. Fazit

In diesem Tutorial haben wir gesehen, wie Jobs in Jenkins mithilfe verschiedener Strategien konfiguriert und geplant werden können.

Wir haben auch gesehen, wie ein Job in Jenkins so konfiguriert wird, dass er automatisch ausgelöst wird, basierend auf bestimmten Aktionen, die im SCM-Repository ausgeführt werden, z. B. Bitbucket.