web-dev-qa-db-fra.com

Authentifier Jenkins CI pour le référentiel privé Github

J'aimerais que Jenkins récupère automatiquement les données de mon référentiel privé hébergé sur Github. Mais je ne sais pas comment accomplir cette tâche. J'ai essayé la documentation, générant ssh-key pour l'utilisateur jenkins et tout ce que je peux voir, c'est: "impossible de cloner le rapport". J'ai vérifié les URL - elles sont valides.

Des indices, peut-être connaissez-vous des docs/blogs/quels que soient ceux qui décrivent ce genre de choses?

132
bx2

Peut-être que le support de GitHub pour deploy keys est ce que vous cherchez? Pour citer cette page:

Quand dois-je utiliser une clé de déploiement?

Simple, lorsque vous avez un serveur qui nécessite un accès direct à un seul dépôt privé. Cette clé est attachée directement au référentiel au lieu d'un compte d'utilisateur personnel.

Si c'est ce que vous essayez déjà et que cela ne fonctionne pas, vous voudrez peut-être mettre à jour votre question avec davantage de détails sur les URL utilisées, le nom et l'emplacement des fichiers de clés, etc.


Passons maintenant à la partie technique: Comment utiliser votre clé SSH avec Jenkins?

Si vous avez, par exemple, un utilisateur jenkins unix, vous pouvez stocker votre clé de déploiement dans ~/.ssh/id_rsa. Lorsque Jenkins essaie de cloner le référentiel via ssh, il essaiera d’utiliser cette clé.

Dans certaines configurations, vous ne pouvez pas exécuter Jenkins en tant que propre compte utilisateur ni éventuellement utiliser l’emplacement par défaut de la clé ssh ~/.ssh/id_rsa. Dans ce cas, vous pouvez créer une clé dans un emplacement différent, par exemple. ~/.ssh/deploy_key, et configurez ssh pour l'utiliser avec une entrée dans ~/.ssh/config:

Host github-deploy-myproject
    HostName       github.com
    User           git
    IdentityFile   ~/.ssh/deploy_key
    IdentitiesOnly yes

Parce que tout ce que vous authentifiez à tous les dépôts Github en utilisant [email protected] et vous ne voulez pas que la clé ci-dessus soit utilisée pour toutes vos connexions à Github, nous avons créé un alias d'hôte github-deploy-myproject. Votre URL de clone devient maintenant

git clone github-deploy-myproject:myuser/myproject

et c’est aussi ce que vous avez mis comme URL du référentiel dans Jenkins.

(Notez que vous devez pas mettre ssh: // devant pour que cela fonctionne.)

136
Mark Longair

Une chose qui fait que cela fonctionne pour moi est de m'assurer que github.com est dans ~jenkins/.ssh/known_hosts.

36
Edward Samson

Si vous avez besoin de Jenkins pour accéder à plus d'un projet, vous devez:
1. ajouter une clé publique à un compte d'utilisateur github
2. ajoutez cet utilisateur en tant que propriétaire (pour accéder à tous les projets) ou en tant que collaborateur dans chaque projet.

De nombreuses clés publiques pour un utilisateur système ne fonctionneront pas, car GitHub trouvera la première clé de déploiement correspondante et renverra une erreur du type "ERREUR: autorisation accordée à l'utilisateur/repo2 refusée à l'utilisateur/repo1"

http://help.github.com/ssh-issues/

13
Sergii Mostovyi

Jenkins crée un utilisateur Jenkins sur le système. La clé ssh doit être générée pour l'utilisateur Jenkins. Voici les étapes:

Sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen

Vous pouvez maintenant créer des informations d'identification Jenkins à l'aide de la clé SSH Sur le tableau de bord Jenkins Ajouter des informations d'identification

sélectionnez cette option

Clé privée: du maître Jenkins ~/.ssh

6
Ray

J'ai eu un problème similaire avec Gitlab. Il s'est avéré que j'avais restreint le nombre d'utilisateurs autorisés à se connecter via ssh. Cela n’affectera pas les utilisateurs de github, mais au cas où des personnes se retrouveraient ici pour des problèmes liés à gitlab (et autres), assurez-vous d’ajouter git au paramètre AllowUsers de /etc/ssh/sshd_config:

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git
1
Jon