Je l'ai écrit parce qu'il y avait peu de documents japonais décrivant comment développer le plug-in Jenkins. Il résume les connaissances dont vous aurez besoin si vous essayez d'aller plus loin à partir de Tutorial. Information en avril 2018.
JDK et maven sont nécessaires pour le développement de plug-ins. Installez jdk et maven en vous référant au Tutoriel de développement de plugins.
Générez un modèle de projet avec maven.
mvn -U archetype:generate -Dfilter=io.jenkins.archetypes:
Lorsque vous exécutez la commande, des questions telles que le type de modèle et l'ID d'artefact (nom du plugin) vous seront posées de manière interactive, veuillez donc répondre de manière appropriée. Après avoir créé le modèle, vérifiez que Jenkins démarre à http: // localhost: 8080 / jenkins avec la commande suivante.
mvn hpi:run
Le plug-in développé sera inséré dans Jenkins commencé ici. Vous pouvez vérifier le fonctionnement du plug-in sur ce Jenkins.
Le plug-in est une classe qui hérite des [Extension Points] de Jenkins (https://jenkins.io/doc/developer/extensions/jenkins-core/). Lors de la création d'un plug-in, sélectionnez un point d'extension qui correspond à la fonction à étendre par le plug-in et créez une classe qui en hérite. Ensuite, nous implémenterons la fonction en remplaçant la méthode du point d'extension. Par exemple, si vous remplacez la méthode perform dans une classe qui hérite de Builder, qui est un point d'extension de la procédure de construction, un plug-in qui ajoute une nouvelle procédure de construction. Vous pouvez faire une auberge.
La Liste des points d'extension vous permet de voir des exemples réels de plug-ins créés en l'héritant pour chaque point d'extension. Utile pour sélectionner et implémenter des points d'extension.
Vous ne pouvez pas utiliser le plug-in de Jenkins simplement en créant la classe de corps principale. Pour utiliser le plugin, vous devez informer Jenkins de l'existence du plugin. Pour ce faire, vous devez créer un Desctiptor comme classe interne de la classe body et ajouter l'annotation @ Extention
.
Par exemple, si vous regardez AWS CodeBuild Plugin Body Class, la classe Descript Il est défini comme une classe interne et annoté avec @ Extension
. DescriptorImpl hérite de BuildStepDescriptor, mais Descriptor défini comme une classe interne comme celle-ci doit hériter du Descriptor existant. Le descripteur à hériter est différent pour chaque point d'extension. Vous pouvez trouver quel descripteur doit être hérité de l'exemple dans Liste des points d'extension.
Les plugins peuvent avoir deux paramètres, global et par travail. Les paramètres généraux sont affichés dans «Gestion Jenkins-> Paramètres système» sur la page principale de Jenkins, et les paramètres spécifiques à la tâche sont affichés dans «Paramètres» pour chaque tâche. Voici comment ajouter chaque paramètre.
Créez global.jelly pour afficher le formulaire de saisie des paramètres. Si le corps du plugin se trouve dans src / main / java / jenkins / plugins / hoge / fuga, alors global.jelly doit être situé dans src / main / ** resources ** / jenkins / plugins / hoge / fuga .. Il est bon de se référer au plug-in existant pour savoir comment écrire global.jelly. Par exemple, si vous souhaitez ajouter le nom de MyPlugin comme paramètre, créez le global.jelly suivant.
<?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>
Ensuite, modifiez le descripteur afin qu'il puisse lire les paramètres saisis. Les paramètres sont transmis à la méthode de configuration Descriptor en tant qu'argument de type JSONObject. Dans le cas de global.jelly ci-dessus, vous pouvez récupérer le nom en modifiant le descripteur comme suit.
@Extension
public static class DescriptorImpl extends BuildStepDescriptor<Builder> {
private String name;
public DescriptorImpl(){
load(); //Charger les paramètres globaux précédemment enregistrés
}
@Override
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
json = json.getJSONObject("MyPlugin"); //Les paramètres globaux sont passés à l'argument json
name = json.getString("name");
save();//Enregistrer les paramètres globaux
return true;
}
public String getName(){ //Préparez un getter pour que la classe body puisse récupérer le nom
return name;
}
.
.
.
La classe body doit récupérer la valeur du Descriptor pour tirer parti des paramètres globaux. Pour ce faire, apportez les modifications suivantes à la classe body.
public class MyPlugin extends Builder implements SimpleBuildStep {
@Override
public Descriptor getDescriptor() { //Getter de descripteur
return (Descriptor) super.getDescriptor();
}
@Override
public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
getDescriptor().getName(); //Obtenir le nom du descripteur
}
.
.
.
}
Créez config.jelly pour afficher le formulaire d'entrée de configuration. Si le corps du plugin se trouve dans src / main / java / jenkins / plugins / hoge / fuga, tout comme lors de l'ajout de paramètres globaux, config.jelly sera dans src / main / ** resources ** / Placez-le dans jenkins / plugins / hoge / fuga. Par exemple, si vous souhaitez ajouter une couleur en tant que paramètre, créez le config.jelly suivant.
<?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>
Afin d'utiliser les paramètres de chaque travail dans la classe body, il est nécessaire d'ajouter l'annotation @ DataBoundConstructor
au constructeur et d'ajouter l'argument.
@DataBoundConstructor
public class MyPlugin extends Builder implements SimpleBuildStep {
final private String color;
@DataBoundConstructor
public MyPlugin(String color){
this.color = color; //Les paramètres spécifiques à la tâche sont transmis en tant qu'arguments
}
.
.
.
}
J'ai expliqué la méthode de développement de base du plug-in Jenkins. Je pense que vous devriez apprendre des choses plus pratiques à partir des exemples dans Extension Points.
document | URL |
---|---|
Documentation développeur Jenkins | https://jenkins.io/doc/developer/ |
Tutoriel de création de plug-ins | https://jenkins.io/doc/developer/tutorial/ |
Liste des fonctions pouvant être étendues avec des plug-ins | https://jenkins.io/doc/developer/extensions/jenkins-core/ |
Wiki développeur Jenkins | https://wiki.jenkins.io/display/JENKINS/Extend+Jenkins |
Jenkins JavaDoc | http://javadoc.jenkins-ci.org/ |
Recommended Posts