Lors de l'écriture de pipelines jenkins, il semble très gênant de valider chaque nouvelle modification afin de voir si cela fonctionne.
Existe-t-il un moyen de les exécuter localement sans valider le code?
Lors de l'écriture de pipelines jenkins, il semble très gênant de valider chaque nouvelle modification afin de voir si cela fonctionne.
Existe-t-il un moyen de les exécuter localement sans valider le code?
Vous ne pouvez pas exécuter le script Pipeline localement, car son objectif est de scripter Jenkins. (C'est une des raisons pour lesquelles il est préférable de conserver votre Jenkinsfile
code court et limité au traitement des fonctionnalités de Jenkins; votre logique de génération réelle doit être gérée avec des processus externes ou des outils de génération que vous invoquez via une ligne sh
ou une bat
étape.)
Si vous voulez tester une modification pour la Jenkinsfile
vivre mais sans la valider , utilisez la fonction Replay ajoutée dans 1.14
JENKINS-33925 suit les souhaits pour un cadre de test automatisé.
J'ai une solution qui fonctionne bien pour moi. Il se compose d'un jenkins local exécuté dans docker et d'un hook web git pour déclencher le pipeline dans les jenkins locaux à chaque validation. Vous n'avez plus besoin de pousser vers votre dépôt github ou bitbucket pour tester le pipeline.
Cela n'a été testé que dans un environnement Linux.
Il est assez simple de faire ce travail bien que cette instruction soit un peu longue. La plupart des étapes sont là.
Voilà ce dont vous avez besoin
Voici comment vous le faites
Jenkins Docker
Créez un fichier appelé Dockerfile à la place de votre choix. Je le place en le
/opt/docker/jenkins/Dockerfile
remplissant avec ceci:Construisez l'image local_jenkins
Vous ne devrez le faire qu'une seule fois ou après avoir ajouté quelque chose au Dockerfile.
Démarrer et redémarrer local_jenkins
De temps en temps, vous souhaitez démarrer et redémarrer facilement jenkins. Par exemple, après un redémarrage de votre machine. Pour cela, j'ai créé un alias que j'ai mis
.bash_aliases
dans mon dossier personnel.Assurez-vous que le
/opt/docker/jenkins/jenkins_home
dossier existe et que vous disposez des droits de lecture et d'écriture de l'utilisateur.Pour démarrer ou redémarrer votre jenkins, tapez simplement:
Tout ce que vous faites dans votre jenkins local sera stocké dans le dossier / opt / docker / jenkins / jenkins_home et conservé entre les redémarrages.
Créez une clé d'accès SSH dans votre Docker Jenkins
C'est une partie très importante pour que cela fonctionne. D'abord, nous démarrons le conteneur docker et créons un shell bash:
Vous êtes maintenant entré dans le conteneur Docker, ce que vous pouvez voir par quelque chose comme
jenkins@e7b23bad10aa:/$
dans votre terminal. Le hachage après le @ sera certainement différent.Créez la clé
Appuyez sur Entrée pour toutes les questions jusqu'à ce que vous receviez l'invite
Copiez la clé sur votre ordinateur. De l'intérieur du conteneur Docker, votre ordinateur est 172.17.0.1 si vous vous demandez.
user = votre nom d'utilisateur et 172.17.0.1 est l'adresse IP de votre ordinateur depuis le conteneur Docker.
Vous devrez saisir votre mot de passe à ce stade.
Essayons maintenant de terminer la boucle en effectuant une connexion ssh à votre ordinateur depuis le conteneur Docker.
Cette fois, vous ne devriez pas avoir à saisir votre mot de passe. Si vous le faites, quelque chose s'est mal passé et vous devez réessayer.
Vous serez maintenant dans le dossier de départ de votre ordinateur. Essayez
ls
et regardez.Ne vous arrêtez pas ici car nous avons une chaîne de coquilles ssh dont nous devons sortir.
Droite! Nous sommes maintenant de retour et prêts à continuer.
Installez votre Jenkins
Vous trouverez votre Jenkins local dans votre navigateur à http: // localhost: 8787 .
La première fois que vous pointez votre navigateur vers votre Jenkins local, vous serez doté d'un assistant d'installation. Les valeurs par défaut sont correctes, assurez-vous toutefois d'installer le plugin de pipeline pendant la configuration.
Configurez vos jenkins
Il est très important d'activer la sécurité basée sur la matrice sur http: // localhost: 8787 / configureSecurity et de vous accorder tous les droits en vous ajoutant à la matrice et en cochant toutes les cases. (Il y a une icône de coche à l'extrême droite)
Jenkins’ own user database
comme domaine de sécuritéMatrix-based security
dans la section AutorisationUser/group to add:
et cliquez sur le[ Add ]
boutonPrevent Cross Site Request Forgery exploits
n'est pas cochée. (Étant donné que ce Jenkins n'est accessible que depuis votre ordinateur, ce n'est pas si grave)[ Save ]
et déconnectez-vous de Jenkins et reconnectez-vous juste pour vous assurer que cela fonctionne. Si ce n'est pas le cas, vous devez recommencer depuis le début et vider le/opt/docker/jenkins/jenkins_home
dossier avant de redémarrerAjouter l'utilisateur git
Nous devons autoriser notre hook git à se connecter à notre Jenkins local avec des droits minimaux. Il suffit de voir et de créer des emplois. Par conséquent, nous créons un utilisateur appelé
git
avec mot de passelogin
.Dirigez votre navigateur vers http: // localhost: 8787 / securityRealm / addUser et ajoutez
git
comme nom d'utilisateur etlogin
mot de passe. Cliquez sur[ Create User ]
.Ajoutez les droits à l'utilisateur git
Accédez à la page http: // localhost: 8787 / configureSecurity dans votre navigateur. Ajoutez l'utilisateur git à la matrice:
git
dans le champUser/group to add:
et cliquez sur[ Add ]
Il est maintenant temps de cocher les cases pour les droits minimaux pour l'utilisateur git. Seuls ceux-ci sont nécessaires:
Assurez-vous que la
Prevent Cross Site Request Forgery exploits
case n'est pas cochée et cliquez sur[ Save ]
Créer le projet de pipeline
Nous supposons que nous avons le nom d'utilisateur
user
et que notre projet compatible avec gitJenkinsfile
est appeléproject
et se trouve à/home/user/projects/project
Dans votre http: // localhost: 8787 Jenkins ajoutez un nouveau projet de pipeline. Je l'ai nommé hookpipeline pour référence.
New Item
dans le menu Jenkinshookpipeline
[ OK ]
Poll SCM
dans la section Build Triggers. Laissez le programme vide.Pipeline script from SCM
Repository URL
champ entrez[email protected]:projects/project/.git
Script Path
champ entrezJenkinsfile
Créer le crochet git
Accédez au
/home/user/projects/project/.git/hooks
dossier et créez un fichier appelépost-commit
qui contient ceci:Rendez ce fichier exécutable:
Testez le hook post-commit:
Vérifiez dans Jenkins si votre projet de raccordement a été déclenché.
Enfin, apportez des modifications arbitraires à votre projet, ajoutez les modifications et effectuez une validation. Cela va maintenant déclencher le pipeline dans votre Jenkins local.
Jours heureux!
la source
docker build -t local_jenkins /opt/docker/jenkins/Dockerfile
pardocker build -t local_jenkins /opt/docker/jenkins
parce que Docker se plaignait de "incapable de préparer le contexte: le contexte doit être un répertoire".$ docker inspect jenkins | grep Gateway
ssh [email protected]
au lieu d'utiliser l'adresse IP. Assurez-vous également que vous avez activé la fonction de connexion à distance dans les préférences système de macOs -> menu Dossier partagéTL; DR
La version longue des
tests Jenkins Pipeline devient de plus en plus pénible. Contrairement à l' approche de configuration de travail déclarative classique où l'utilisateur était limité à ce que l'interface utilisateur a exposé, le nouveau pipeline Jenkins est un langage de programmation à part entière pour le processus de construction où vous mélangez la partie déclarative avec votre propre code. En tant que bons développeurs, nous voulons également avoir des tests unitaires pour ce type de code.
Vous devez suivre trois étapes lors du développement de Jenkins Pipelines. L' étape 1. devrait couvrir 80% des cas d'utilisation.
Exemples
Le dépôt pipelineUnit GitHub contient des exemples Spock sur la façon d'utiliser le framework de test Jenkins Pipeline Unit
la source
Jenkins possède une fonction de «relecture», qui vous permet de rejouer rapidement un travail sans mettre à jour les sources:
la source
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 visuel . L'éditeur fonctionne à partir de l'interface utilisateur de Blue Ocean lorsque vous cliquez sur "configurer" uniquement pour les projets github (c'est un problème connu et ils travaillent pour le faire fonctionner également sur git, etc.).
Mais, comme expliqué dans cette question, vous pouvez ouvrir l'éditeur en parcourant:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
Cliquez ensuite au milieu de la page et appuyez sur
Ctrl+S
, cela ouvrira une zone de texte où vous pourrez coller un script déclaratif de pipeline. Lorsque vous cliquez sur Mettre à jour , s'il y a une erreur de syntaxe, l'éditeur vous indiquera 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, il validerait la modification du fichier Jenkins).
Je suis nouveau sur Jenkins et cela est très utile, sans cela, j'ai dû valider un fichier Jenkins plusieurs fois, jusqu'à ce qu'il fonctionne (très ennuyeux!). J'espère que cela t'aides. À votre santé.
la source
Un peu tard pour la fête, mais c'est pourquoi j'ai écrit
jenny
, une petite réimplémentation de quelques étapes clés du Jenkinsfile. ( https://github.com/bmustiata/jenny )la source
Autant que je sache, ce plugin de pipeline est le "moteur" des nouveaux mécanismes Jenkinsfile, donc je suis assez positif que vous puissiez l'utiliser pour tester localement vos scripts.
Je ne sais pas s'il y a des étapes supplémentaires 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 cette description de fonctionnalité, dernier paragraphe, première entrée.
la source
Dans ma configuration de développement - sans un éditeur Groovy approprié - beaucoup de problèmes de Jenkinsfile proviennent d' erreurs de syntaxe simples . Pour résoudre ce problème, vous pouvez valider le fichier Jenkins par rapport à votre instance Jenkins (exécutée sur
$JENKINS_HTTP_URL
):curl -X POST -H $(curl '$JENKINS_HTTP_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') -F "jenkinsfile=<Jenkinsfile" $JENKINS_HTTP_URL/pipeline-model-converter/validate
La commande ci-dessus est une version légèrement modifiée de https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating-(or-linting)-a-Declarative-Jenkinsfile-from-the-command-line
la source
Mis à part la fonctionnalité de relecture que d'autres ont déjà mentionnée (idem sur son utilité!), J'ai trouvé les éléments suivants également utiles:
la source
Mettez votre clé SSH dans votre profil Jenkins, puis utilisez le linter déclaratif comme suit:
Cela fera une analyse statique sur votre fichier Jenkins. Dans l'éditeur de votre choix, définissez un raccourci clavier qui exécute cette commande automatiquement. Dans Visual Studio Code, qui est ce que j'utilise, accédez à Tâches> Configurer les tâches, puis utilisez le JSON suivant pour créer une commande Valider Jenkinsfile :
la source
j'utilise replay future, pour faire une mise à jour et courir rapidement.
la source
Avec quelques limitations et pour les pipelines scriptés, j'utilise cette solution:
la source