Lors de l'écriture de pipelines Jenkins, il semble très gênant de valider chaque nouvelle modification afin de voir si elle fonctionne.
Existe-t-il un moyen de les exécuter localement sans commettre le code?
Vous ne pouvez pas exécuter de script Pipeline localement, son objectif étant de créer un script Jenkins. (C’est l’une des raisons pour lesquelles il est préférable de garder votre Jenkinsfile
courte et limitée au code qui traite réellement des fonctionnalités de Jenkins; votre logique de construction réelle doit être gérée avec des processus externes ou des outils de construction que vous appelez via une étape sh
ou bat
à une ligne .)
Si vous souhaitez tester une modification de Jenkinsfile
live mais sans commettre _, utilisez la fonctionnalité Replay ajoutée dans 1.14
JENKINS-33925 effectue le suivi des données souhaitées pour un cadre de test automatisé.
TL; DR
Framework de test Jenkins Pipeline Unit
Version longue
Les tests de pipeline Jenkins deviennent de plus en plus pénibles. Contrairement à l'approche de configuration déclarative des tâches classique dans laquelle l'utilisateur était limité à ce que l'interface utilisateur exposait, le nouveau pipeline Jenkins est un langage de programmation complet pour le processus de construction dans lequel vous mélangez la partie déclarative avec votre propre code. En tant que bons développeurs, nous souhaitons également avoir des tests unitaires pour ce type de code.
Vous devez suivre trois étapes pour développer les canalisations Jenkins. Le step 1. devrait couvrir 80% des cas d'utilisation.
Exemples
Le référentiel pipelineUnit GitHub contient des exemples Spock sur la manière d'utiliser cadre de test de l'unité de pipeline Jenkins
Au moment de l'écriture, (fin juillet 2017) avec le plugin Blue Ocean , vous pouvez vérifier la syntaxe d'un pipeline déclaratif directement dans l'éditeur de pipeline visual. L'éditeur fonctionne à partir de l'interface utilisateur Blue Ocean lorsque vous cliquez sur "Configurer" uniquement pour les projets github (il s'agit d'un problème connu qui s'efforce de le faire fonctionner également sur git, etc.).
Mais, comme expliqué dans cette question vous pouvez ouvrir l’éditeur en navigant vers:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
Cliquez ensuite au milieu de la page, puis appuyez sur Ctrl+S
. Une zone de texte permettant de coller un script déclaratif de pipeline s'affiche. Lorsque vous cliquez sur Mise à jour, s'il y a une erreur de syntaxe, l'éditeur vous indique où se trouve l'erreur de syntaxe. Comme dans cette capture d'écran:
S'il n'y a pas d'erreur de syntaxe, la zone de texte se fermera et la page visualisera votre pipeline. Ne vous inquiétez pas, cela ne sauvera rien (s'il s'agit d'un projet github, le changement du fichier Jenkins sera validé).
Je suis nouveau à Jenkins et cela est très utile, sans cela, je devais commettre un fichier Jenkins plusieurs fois, jusqu'à ce que cela fonctionne (très ennuyeux!). J'espère que cela t'aides. À votre santé.
Un peu tard pour la fête, mais c’est pourquoi j’ai écrit jenny
, une petite réimplémentation de certaines étapes fondamentales de Jenkinsfile. ( https://github.com/bmustiata/jenny )
Pour autant que je sache, ce Pipeline Plugin est le "moteur" de la nouvelle mécanique Jenkinsfile. Je suis donc tout à fait convaincu que vous pouvez l'utiliser pour tester vos scripts localement.
Je ne sais pas si des étapes supplémentaires sont nécessaires lorsque vous le copiez dans un fichier Jenkins, mais la syntaxe, etc. devrait être exactement la même.
Edit: Trouvé la référence sur le "moteur", vérifiez this description de fonction, dernier paragraphe, première entrée.
Mis à part la fonctionnalité de relecture déjà mentionnée par d'autres (tout comme par son utilité!), J'ai trouvé les éléments suivants utiles:
j'utilise replay future pour effectuer des mises à jour et exécuter rapidement.
Avec certaines limitations et pour les pipelines scriptés, j'utilise cette solution:
node('master') {
stage('Run!') {
def script = load('...you job file...')
}
}
def execute() {
... main job code here ...
}
execute()
Mettez votre clé SSH dans votre profil Jenkins, puis utilisez l’indicateur déclaratif comme suit:
ssh jenkins.hostname.here declarative-linter < Jenkinsfile
Cela fera une analyse statique sur votre Jenkinsfile. Dans l'éditeur de votre choix, définissez un raccourci clavier qui exécute cette commande automatiquement. Dans Visual Studio Code, que j'utilise, accédez à Tâches> Configurer les tâches, puis utilisez le JSON suivant pour créer une commande Validate Jenkinsfile:
{
"version": "2.0.0",
"tasks": [
{
"label": "Validate Jenkinsfile",
"type": "Shell",
"command": "ssh jenkins.hostname declarative-linter < ${file}"
}
]
}