web-dev-qa-db-fra.com

Jenkins Sudo: aucun tty présent et aucun programme askpass spécifié avec NOPASSWD

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
17
Ander Acosta

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
29
Ander Acosta

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/

3
yasirfarooqui

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. enter image description here 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

  1. Sudo su
  2. visudo
  3. Tomcat ALL=(ALL) NOPASSWD: ALL #si l'utilisateur affiché est Tomcat enter image description here
0
wale