Je passe plusieurs jours à configurer le fichier /etc/sudoers
pour pouvoir accorder des autorisations de root à l'utilisateur jenkins
. J'ai Jenkins installé sur mon serveur car j'héberge plusieurs projets avec symfony, ionic, neo4j, etc ... Le problème est que je ne peux pas faire de build dans les projets avec ionic, j'obtiens cette erreur: Sudo: no tty present and no askpass program specified.
Voici le contenu de mon fichier/etc/sudoers:
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
jenkins ALL=(ALL) NOPASSWD: ALL
# Allow members of group Sudo to execute any command
%Sudo ALL=(ALL:ALL) ALL
J'ai testé la solution décrite par @Jayan dans les commentaires de la question. Vous devez inclure la nouvelle ligne à la fin du fichier:
Solution: https://stackoverflow.com/a/24648413/54506
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group Sudo to execute any command
%Sudo ALL=(ALL:ALL) ALL
jenkins ALL=(ALL) NOPASSWD: ALL
Il est fort possible que vous ajoutiez un mauvais utilisateur au fichier sudoers. Cela m'est également arrivé et la solution pour ajouter une entrée dans le fichier sudoers ne fonctionnait pas pour moi. Vous devrez connaître l'utilisateur réel que votre jenkins utilise pour exécuter des commandes. À cet effet, vous pouvez ajouter une étape de construction (Execute Shell) dans vos jenkins avec la commande suivante:
whoami
Essayez ensuite d'exécuter à nouveau le travail jenkins et dans la sortie de la console, vous verrez l'utilisateur que jenkins utilise pour exécuter les commandes. Vous devrez ensuite ajouter cet utilisateur à votre fichier sudoers. Par exemple, si l'utilisateur était "Tomcat", vous ajouterez la ligne suivante à la fin de votre fichier sudoers:
Tomcat ALL=(ALL) NOPASSWD: ALL
Réf: http://techrofile.com/jenkins-Sudo-no-tty-present-and-no-askpass-program-specified-with-nopasswd/
Ceci est juste une réponse pour élaborer sur les étapes à suivre pour résoudre le problème.
Tout d'abord, déterminez quel utilisateur Jenkins GUI utilise pour exécuter le script shell bash.
sélectionnez le projet> Configurer> entrez whoami
dans le shell exécutable> enregistrer et construire maintenant. Afficher le résultat dans l'historique de génération> cliquez sur la sortie de la console
L'utilisateur peut être Tomcat ou jenkins ou autre.
SSH dans le serveur Jenkins