Ich habe es geschrieben, weil es nur wenige japanische Dokumente gab, in denen beschrieben wurde, wie das Jenkins-Plug-In entwickelt wird. Es fasst das Wissen zusammen, das Sie benötigen, um einen Schritt weiter von Tutorial zu gehen. Informationen ab April 2018.
JDK und Maven werden für die Plug-Entwicklung benötigt. Installieren Sie jdk und maven unter Plugin Development Tutorial.
Generieren Sie eine Projektvorlage mit maven.
mvn -U archetype:generate -Dfilter=io.jenkins.archetypes:
Wenn Sie den Befehl ausführen, werden Ihnen einige Fragen wie der Vorlagentyp und die Artefakt-ID (Plugin-Name) interaktiv gestellt. Antworten Sie daher bitte entsprechend. Überprüfen Sie nach dem Erstellen der Vorlage, ob Jenkins mit dem folgenden Befehl unter http: // localhost: 8080 / jenkins startet.
mvn hpi:run
Das entwickelte Plug-In wird hier in Jenkins eingefügt. Sie können die Funktion des Plug-Ins auf diesem Jenkins überprüfen.
Das Plug-In ist eine Klasse, die Jenkins '[Erweiterungspunkt] erbt (https://jenkins.io/doc/developer/extensions/jenkins-core/). Wählen Sie beim Erstellen eines Plug-Ins einen Erweiterungspunkt aus, der der vom Plug-In zu erweiternden Funktion entspricht, und erstellen Sie eine Klasse, die es erbt. Anschließend implementieren wir die Funktion, indem wir die Erweiterungspunktmethode überschreiben. Wenn Sie beispielsweise die perform-Methode in einer Klasse überschreiben, die [Builder] erbt (http://javadoc.jenkins-ci.org/hudson/tasks/Builder.html). Dies ist ein Erweiterungspunkt der Erstellungsprozedur, ein Plug, der eine neue Erstellungsprozedur hinzufügt. Sie können ein Gasthaus machen.
Mit Erweiterungspunktliste können Sie aktuelle Beispiele für Plug-Ins anzeigen, die durch Erben für jeden Erweiterungspunkt erstellt wurden. Nützlich für die Auswahl und Implementierung von Erweiterungspunkten.
Sie können das Plug-In von Jenkins nicht einfach durch Erstellen der Hauptkörperklasse verwenden. Um das Plugin verwenden zu können, müssen Sie Jenkins über die Existenz des Plugins informieren. Dazu müssen Sie einen Desctiptor als innere Klasse der Body-Klasse erstellen und die Annotation "@ Extention" hinzufügen.
Wenn Sie sich beispielsweise [AWS CodeBuild Plugin Body Class] ansehen (https://github.com/awslabs/aws-codebuild-jenkins-plugin/blob/9541d89e6ad44bb049c013cd44166eae30192fb1/src/main/java/CodeBuilder.java) Es ist als innere Klasse definiert und mit "@ Extension" versehen. DescriptorImpl erbt BuildStepDescriptor, aber Descriptor, der als solche innere Klasse definiert ist, muss vom vorhandenen Descriptor erben. Der zu erbende Deskriptor ist für jeden Erweiterungspunkt unterschiedlich. Welchen Deskriptor aus dem Beispiel erben soll, erfahren Sie in Erweiterungspunktliste.
Das Plug-In kann zwei Arten von Einstellungen haben, global und pro Job. Globale Einstellungen werden unter "Jenkins-Verwaltung-> Systemeinstellungen" auf der Jenkins-Startseite angezeigt, und auftragsspezifische Einstellungen werden für jeden Auftrag unter "Einstellungen" angezeigt. Hier erfahren Sie, wie Sie die einzelnen Einstellungen hinzufügen.
Erstellen Sie global.jelly, um das Eingabeformular für Einstellungen anzuzeigen. Wenn sich der Hauptteil des Plugins in src / main / java / jenkins / plugins / hoge / fuga befindet, sollte sich global.jelly in src / main / ** resources ** / jenkins / plugins / hoge / fuga befinden .. Informationen zum Schreiben von global.jelly finden Sie im vorhandenen Plug-In. Wenn Sie beispielsweise den Namen MyPlugin als Einstellung hinzufügen möchten, erstellen Sie die folgende Datei global.jelly.
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
<f:section title="${%MyPlugin}" name="MyPlugin">
<f:entry title="${%name}" field="name">
<f:textbox />
</f:entry>
</f:section>
</j:jelly>
Ändern Sie als Nächstes den Deskriptor so, dass er die eingegebenen Einstellungen lesen kann. Die Einstellungen werden als Argument vom Typ JSONObject an die Descriptor-Konfigurationsmethode übergeben. Im Fall von global.jelly oben können Sie den Namen abrufen, indem Sie den Deskriptor wie folgt ändern.
@Extension
public static class DescriptorImpl extends BuildStepDescriptor<Builder> {
private String name;
public DescriptorImpl(){
load(); //Laden Sie zuvor gespeicherte globale Einstellungen
}
@Override
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
json = json.getJSONObject("MyPlugin"); //Globale Einstellungen werden an das json-Argument übergeben
name = json.getString("name");
save();//Speichern Sie die globalen Einstellungen
return true;
}
public String getName(){ //Bereiten Sie einen Getter vor, damit die Körperklasse den Namen abrufen kann
return name;
}
.
.
.
Die Body-Klasse muss den Wert aus dem Deskriptor abrufen, um die globalen Einstellungen nutzen zu können. Nehmen Sie dazu die folgenden Änderungen an der Body-Klasse vor.
public class MyPlugin extends Builder implements SimpleBuildStep {
@Override
public Descriptor getDescriptor() { //Deskriptor Getter
return (Descriptor) super.getDescriptor();
}
@Override
public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
getDescriptor().getName(); //Holen Sie sich den Namen von Descriptor
}
.
.
.
}
Erstellen Sie config.jelly, um das Konfigurationseingabeformular anzuzeigen. Befindet sich der Hauptteil des Plugins in src / main / java / jenkins / plugins / hoge / fuga, genau wie beim Hinzufügen globaler Einstellungen, befindet sich config.jelly in src / main / ** resources ** / Legen Sie es in Jenkins / Plugins / Hoge / Fuga. Wenn Sie beispielsweise Farbe als Einstellung hinzufügen möchten, erstellen Sie die folgende config.jelly.
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
<f:entry title="${%Color}" field="color">
<f:textbox />
</f:entry>
</j:jelly>
Um die Einstellungen für jeden Job in der Body-Klasse zu verwenden, muss dem Konstruktor die Annotation @ DataBoundConstructor
hinzugefügt und das Argument hinzugefügt werden.
@DataBoundConstructor
public class MyPlugin extends Builder implements SimpleBuildStep {
final private String color;
@DataBoundConstructor
public MyPlugin(String color){
this.color = color; //Auftragsspezifische Einstellungen werden als Argumente übergeben
}
.
.
.
}
Ich habe die grundlegende Entwicklungsmethode des Jenkins-Plug-Ins erklärt. Ich denke, Sie sollten mehr praktische Dinge aus den Beispielen in Erweiterungspunkte lernen.
Dokument | URL |
---|---|
Jenkins Entwicklerdokumentation | https://jenkins.io/doc/developer/ |
Tutorial zum Erstellen von Plug-Ins | https://jenkins.io/doc/developer/tutorial/ |
Liste der Funktionen, die mit Plug-Ins erweitert werden können | https://jenkins.io/doc/developer/extensions/jenkins-core/ |
Jenkins Entwickler-Wiki | https://wiki.jenkins.io/display/JENKINS/Extend+Jenkins |
Jenkins JavaDoc | http://javadoc.jenkins-ci.org/ |
Recommended Posts