web-dev-qa-db-fra.com

Exécuter la commande Shell dans jenkins en tant qu'utilisateur root?

J'ai récemment commencé à utiliser Jenkins pour l'intégration. Tout allait bien jusqu'à ce que j'exécute des tâches sur le nœud maître sans commande Shell, mais je dois exécuter des tâches sur le nœud maître ainsi que sur le nœud esclave qui contient les commandes Shell. Je ne suis pas en mesure d'exécuter ces commandes Shell en tant qu'utilisateur root. j'ai essayé

  1. En utilisant SSH Keys.
  2. Définition du nom d'utilisateur dans les commandes Shell.
  3. Utilisation de Sudo.

Je reçois permission denied erreur chaque fois que j'utilise l'une des méthodes ci-dessus.

13
Raj Gupta

Vous devez modifier l'autorisation de l'utilisateur jenkins afin de pouvoir exécuter les commandes Shell. Vous pouvez installer les jenkins en tant que service (télécharger le package rpm), vous devrez peut-être modifier les ports car par défaut, il exécute http sur 8080 et AJP sur le port 8009.



Le processus suivant concerne CentOS
1. Ouvrez ce script (en utilisant VIM ou autre éditeur):

vim /etc/sysconfig/jenkins

2. Trouvez ceci $JENKINS_USER et passez à "root":

$JENKINS_USER="root"

3. Modifiez ensuite la propriété de Jenkins home, webroot et logs:

chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

4) Redémarrez Jenkins et vérifiez que l'utilisateur a été changé:

service jenkins restart
ps -ef | grep jenkins

Vous devriez maintenant pouvoir exécuter les travaux Jenkins en tant qu'utilisateur root et toutes les commandes Shell seront exécutées en tant que root.

21
Pulkit

Je déconseille d'exécuter l'utilisateur jenkins en tant que root. Cela pourrait exposer le système d'exploitation et tous les dépôts que jenkins peut construire.

L'exécution de n'importe quel script en tant que root est un risque pour la sécurité, mais une méthode légèrement plus sûre serait d'accorder à l'utilisateur jenkins Sudo un accès pour exécuter uniquement le script, sans avoir besoin d'un mot de passe.

Sudo visudo

et ajoutez ce qui suit:

jenkins    ALL = NOPASSWD: /var/lib/jenkins/jobs/[job name]/workspace/script

Vérifiez à nouveau votre chemin via le journal de la console d'un script de génération ayant échoué. Celui illustré ici est celui par défaut.

Maintenant, dans la tâche jenkins, vous pouvez appeler Sudo $WORKSPACE/your script

29
oden