Je ne parviens pas à faire authentifier le plug-in Jenkins git avec un dépôt privé git sur bitbucket.org. J'ai généré une paire de clés privée/publique à l'aide de ssh-keygen et défini la clé publique dans mon compte bitbucket sous la page de compte de clés ssh.
Dans la page de configuration du travail, j'ai défini la section Gestion du code source comme suit:
Repository URL: [email protected]:mproject.git (the SSH url for clone)
Credentials: The private key id_rsa generated by ssh-keygen (no passphrase) and user git.
Il donne immédiatement l'erreur suivante:
Failed to connect to repository : Command "git -c core.askpass=true ls-remote -h [email protected]:myproject.git HEAD" returned status code 128:
stdout:
stderr: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Lorsque je fais la même commande git à partir de la ligne de commande dans le répertoire d'espace de travail dans un shell, cela fonctionne correctement. J'ai mon ~/.bashrc spécifié dans Build Environment/Properties File Path donc je suis confus ce qui pourrait être différent quand il s'exécute dans le travail jenkins.
Je n'ai que deux utilisateurs sur ma machine jenkins (jenkins et root) et j'exécutais la commande git en tant qu'utilisateur jenkins. Le répertoire personnel de l'utilisateur Jenkins est/home/Jenkins. Mon travail Jenkins s'exécute en tant qu'utilisateur anonyme. Cela pourrait-il être le problème?
J'ai les fichiers .ssh suivants:
-rw-r--r--. 1 jenkins jenkins 89 Apr 25 11:18 config
-rw-r--r--. 1 jenkins jenkins 137 Apr 24 13:56 environment
-rw-------. 1 jenkins jenkins 1766 Apr 24 13:54 id_rsa
-rw-r--r--. 1 jenkins jenkins 425 Apr 24 13:54 id_rsa.pub
-rw-r--r--. 1 jenkins jenkins 806 Apr 25 12:06 known_hosts
drwx------. 2 jenkins jenkins 85 Apr 25 12:05 .ssh
Je suppose que vous avez ajouté des clés ssh à votre utilisateur, pas à l'utilisateur jenkins.
Par défaut, Jenkins est exécuté par l'utilisateur Jenkins. Le répertoire de base est (par défaut) /var/lib/jenkins
. Pour vérifier mon hypothèse, veuillez vous connecter en tant qu'utilisateur de jenkins:
su jenkins
et appelez:
git -c core.askpass=true ls-remote -h [email protected]:myproject.git HEAD
pour vérifier si cela va retourner une erreur.
Vous devriez avoir le répertoire /var/lib/jenkins/.ssh
qui contient les clés ssh
appropriées. Vous devrez ajouter id_rsa.pub
à partir de ce répertoire à votre compte sur bitbucket.
Suivant dans la configuration du travail vient de définir:
Repository URL: [email protected]:ntti3/gtip.git
Credentials: - none -
La configuration décrite fonctionne pour mon Jenkins avec bitbucket.
Assurez-vous également que le répertoire .ssh a défini les droits d'accès appropriés. Ssh n'aime pas les répertoires "trop ouverts":
-rw------- 1 jenkins jenkins 407 Apr 14 14:14 authorized_keys
-rw------- 1 jenkins jenkins 1676 Nov 25 16:37 id_rsa
-rw-rw-r-- 1 jenkins jenkins 400 Nov 25 16:38 id_rsa.pub
-rw-r--r-- 1 jenkins jenkins 3096 Feb 11 12:11 known_hosts
drwx------ 2 jenkins jenkins 4096 Apr 14 14:14 .ssh
Dans mon cas, le problème tenait à avoir déjà créé un utilisateur jenkins avec le répertoire personnel/home/jenkins, puis à installer root en tant que root. Cela peut avoir créé une certaine confusion entre le fait que le répertoire personnel soit/var/lib/jenkins (comme d’habitude) et/home/jenkins. Le correctif était de:
Merci pour l'aide.
Dans mon cas, le problème était l'empreinte digitale de la clé RSA. J'ai ajouté la clé ssh pour l'utilisateur Jenkins comme décrit dans la documentation, mais j'ai reçu le même message d'erreur. Je l'ai résolu en me connectant en tant qu'utilisateur Jenkins à l'aide de
Sudo su jenkins
Ensuite, j'ai tapé ce qui suit
git -c core.askpass=true ls-remote -h ssh://git@SERVER/PROJECT/REPO.git HEAD
Et j'ai le message suivant
The authenticity of Host 'SERVER ([IP_ADDRESS]:PORT)' can't be established. RSA key fingerprint is 11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:ff. Are you sure you want to continue connecting (yes/no)?
En répondant «oui» à cette question, le serveur Bitbucket est ajouté à la liste des hôtes connus, ce qui a vraiment résolu mon problème.
pour ssh.bash
ssh -K ${PATH}/.ssh2/id_rsa_2048_b $*
export GIT_SSH = ${PATH}/ssh.bash