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?
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.)
Une chose qui fait que cela fonctionne pour moi est de m'assurer que github.com
est dans ~jenkins/.ssh/known_hosts
.
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"
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
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