2 votes

Jenkins - Publish Over SSH - UNSTABLE - Permission refusée

Notre processus de déploiement jenkins extrait notre dépôt git dans l'espace de travail et copie ensuite les fichiers de l'espace de travail dans notre environnement de préparation, en utilisant le plugin de publication par SSH.

Il y a 2 jours, nous avons eu un commit et un déploiement automatique à 10:34 AM et à 02:13 PM. Le commit du matin a bien été déployé, mais depuis le commit de l'après-midi, le travail de publication rapporte ceci :

BUILD SUCCESSFUL
Total time: 15 seconds
SSH: Connecting from host [...]
SSH: Connecting with configuration [...] ...
SSH: Disconnecting configuration [...] ...
ERROR: Exception when publishing, exception message [Permission denied]
Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE

Le commit lui-même était un commit mineur, contenant des fichiers css et javascript pour le frontend. Rien de spectaculaire.

L'ensemble de l'environnement de mise en place a été récursivement mis en chmod 777 et chown à l'utilisateur et au groupe qui est utilisé par la configuration de déploiement par ssh (temporairement, pour s'assurer que nous ne rencontrons pas de problèmes de permission de fichiers).

La permission est toujours refusée.

La configuration de la tâche de déploiement par ssh n'a pas été modifiée au cours des deux derniers mois. Mêmes clés, même utilisateur, mêmes mots de passe, etc.

Malheureusement, le message d'erreur ne contient aucun détail utile.

Une autre tâche qui déploie un projet différent dans le même serveur web mais dans un webroot différent fonctionne parfaitement.

Le serveur fonctionne sous FreeBSD et est stationné chez un hébergeur.

Avant de les contacter, nous voulons nous assurer que nous avons tout vérifié de notre côté.

0 votes

Avez-vous essayé ssh -v ? Ce qui devrait montrer une sortie verbeuse et peut conduire à plus d'informations.

0 votes

Je n'y ai pas pensé. C'est un bon conseil ! Pour référence future, avec plus de détails : Plus d'informations que le petit message d'erreur peuvent être recueillies en se connectant à l'utilisateur jenkins sur le serveur jenkins via ssh, puis en utilisant verbose ssh (ssh -v) pour effectuer manuellement le déploiement ssh via la console. (Ce qui est exactement ce que jenkins fait). @Iony : Merci pour cette idée !

3voto

Worp Points 193

Le problème était que notre travail Jenkins ne vide pas son espace de travail. Jamais.
Il y avait un dossier dans l'espace de travail qui était à l'origine sur git, mais qui a été retiré, et qui réside en dehors de la racine web. Mais comme il n'est pas nettoyé, des artefacts de ce dossier restaient dans l'espace de travail.

Or, quelqu'un a apporté une modification à ce dossier sur le staging (directement via SSH) et a oublié de définir les permissions correctement. Ainsi, lorsque le job "publish over ssh" est intervenu, il a essayé de copier les anciens artefacts, mais n'avait pas les permissions.

Comme le dossier se trouve à l'extérieur du webroot, que nous avons mis sous chown et défini à 777 pour les tests, nous ne l'avons pas vu.

La tâche Jenkins a été modifiée pour effacer l'espace de travail après chaque tâche et les permissions ont été définies correctement. Le déploiement fonctionne à nouveau.

@Others : Veuillez tenir compte du commentaire de la question originale par Iony . C'est très utile pour aller au fond des choses.

De plus, dans l'onglet avancé de la tâche publish over ssh, vous pouvez sélectionner "verbose output". Cela permettra à la sortie console de la tâche en cours d'exécution d'être verbeuse. Voir Publier sur - Plugins Wiki at jenkins-ci.org

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X