Création de paramètres dynamiques dans un travail Jenkins, ou comment rendre votre tâche conviviale

Bonjour, Habr !


Aujourd'hui, je voudrais partager l'une des façons d'utiliser le plugin Active Choices pour rendre la tâche dans Jenkins la plus unifiée et la plus compréhensible pour l'utilisateur.


Présentation


Une abréviation telle que DevOps n'est plus quelque chose de nouveau pour la communauté informatique. Pour de nombreuses personnes, l'expression «créer des DevOps» est associée à une sorte de bouton magique, lorsque vous cliquez dessus, le code de l'application se transforme automatiquement en application déployée et testée (tout est en fait plus compliqué, mais nous faisons abstraction de tous les processus).


Nous avons donc reçu une commande pour créer un tel bouton magique afin que les administrateurs puissent déployer l'application en un seul clic. Il existe différents types de mise en œuvre de cette tâche: de l'écriture d'un bot pour l'un des messagers au développement d'une application distincte. Néanmoins, le but de tout cela est le même: rendre le lancement de l'assemblage et le déploiement de l'application les plus transparents et pratiques.


Dans notre cas, nous utiliserons Jenkins .



Défi


Créez un travail Jenkins pratique qui exécutera l'assemblage et / ou le déploiement du microservice sélectionné d'une certaine version.



Entrer les données


Nous avons plusieurs référentiels qui contiennent le code source de divers microservices.


Définition des paramètres


Les paramètres suivants doivent entrer dans l'entrée de notre travail:


  1. L'URL du référentiel avec le code du microservice que nous voulons collecter et déployer lors du démarrage du travail.
  2. ID du commit à partir duquel l'assemblage aura lieu.

TEL QUEL


La façon la plus simple d'accomplir la tâche consiste à créer deux paramètres de type String.



Dans ce cas, l'utilisateur devra saisir manuellement le chemin d'accès au référentiel et l'ID de validation, ce qui, vous voyez, n'est pas entièrement pratique.



COMME ÊTRE


Essayons maintenant un autre type de paramètre pour considérer tous ses avantages.
Créez le premier paramètre de type Choice Parameter, le second - Active Choices Reactive Reference Parameter. Dans le paramètre de type Choix, nous ajoutons les noms des référentiels où le code de nos microservices est stocké manuellement dans le champ Choix.



Si le public aime cet article, je décrirai dans le prochain article le processus de configuration des tâches dans Jenkins en utilisant la description via le code (Configuration as code), c'est-à-dire nous n'avons pas besoin d'entrer manuellement les noms des référentiels et de créer des paramètres, tout se fera automatiquement (notre code recevra une liste de référentiels de SCM et créera un paramètre avec cette liste).

Les valeurs du deuxième paramètre seront remplies dynamiquement avec nous, selon la valeur que prendra le premier paramètre (test1 ou test2), car chaque référentiel a sa propre liste de commits.


Le paramètre de référence réactive des choix actifs comporte les champs suivants à remplir:


  1. Nom - le nom du paramètre.
  2. Script - le code qui sera exécuté à chaque fois que la valeur du paramètre du champ Paramètre référencé est modifiée (dans notre cas, lorsque nous choisissons entre test1 et test2).
  3. Description - une brève description du paramètre.
  4. Type de choix - le type de l'objet retourné par le script (dans notre cas, nous retournerons le code html).
  5. Paramètre référencé - le nom du paramètre, lors de la modification de la valeur dont le code de la section Script sera exécuté.


Nous procédons directement au remplissage du champ principal de ce paramètre. Nous proposons deux types d'implémentation: à l'aide de Groovy Script ou Scriptler Script .
Nous sélectionnons le premier, car Scriptler n'est qu'un plugin qui enregistre les scripts que vous avez déjà écrits et vous permet de les utiliser dans d'autres tâches sans avoir à recopier.


Code Groovy pour obtenir toutes les validations du référentiel sélectionné:


AUTH = "    Base64" GIT_URL = "url   SCM (https://bitbucket.org/)" PROJECT_NAME = "  ,   " def htmlBuild() { html = """ <html> <head> <meta charset="windows-1251"> <style type="text/css"> div.grayTable { text-align: left; border-collapse: collapse; } .divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead { padding: 0px 3px; } .divTable.grayTable .divTableBody .divTableCell { font-size: 13px; } </style> </head> <body> """ def commitOptions = "" getCommitsForMicroservice(MICROSERVICE_NAME).each { commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>" } html += """<p style="display: inline-block;"> <select id="commit_id" size="1" name="value"> ${commitOptions} </select></p></div>""" html += """ </div> </div> </div> </body> </html> """ return html } def getCommitsForMicroservice(microserviceRepo) { def commits = [:] def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT_NAME}/repos/${microserviceRepo}/commits" def conn = new URL(endpoint).openConnection() conn.setRequestProperty("Authorization", "Basic ${AUTH}") def response = new groovy.json.JsonSlurper().parseText(conn.content.text) response.values.each { commits.put(it.displayId, it.message) } return commits } return htmlBuild() 

Sans entrer dans les détails, ce code reçoit le nom du microservice (MICROSERVICE_NAME) en entrée, envoie une demande à Bitbucket (méthode getCommitsForMicroservice ) à l'aide de son API, et reçoit l'id et le message de validation de tous les validations pour ce microservice.
Comme mentionné précédemment, ce code devrait renvoyer le code HTML qui sera affiché sur la page Générer avec des paramètres dans Jenkins, nous encapsulons donc toutes les valeurs reçues de Bitbucket dans la liste et les ajoutons à select.


Après avoir terminé toutes les étapes, nous devrions obtenir une si belle page Build with Parameters .


Si vous sélectionnez le microservice test1:



Si vous choisissez le microservice test2:



Acceptez qu'il sera beaucoup plus pratique pour l'utilisateur d'interagir avec votre tâche de cette manière que de copier l'URL à chaque fois et de rechercher l'ID de validation nécessaire.


PS Cet article fournit un exemple très simplifié, qui peut ne pas avoir d'application pratique sous cette forme, car les assemblages ont des paramètres beaucoup plus différents, mais le but de cet article était de montrer le fonctionnement de l'outil et non de fournir une solution de travail.


PSS Comme je l'ai écrit plus tôt, si cet article est utile, le suivant portera sur la configuration dynamique des tâches Jenkins à l'aide de code .

Source: https://habr.com/ru/post/fr485664/


All Articles