web-dev-qa-db-fra.com

Comment créer un webhook Gitlab pour mettre à jour un dépôt miroir sur Github?

Je voudrais créer un webhook dans Gitlab pour mettre à jour automatiquement un référentiel miroir sur Github, chaque fois qu'un événement Push se produit. J'ai vérifié cela page , mais je n'ai pas compris comment cela se faisait.

Ma version de Gitlab est 6.5. Voici la page de configuration:

inserir a descrição da imagem aqui

Que dois-je mettre dans l'URL? Où dois-je placer le script pour mettre à jour le référentiel?

35
Yamaneko

Vous n'avez pas besoin d'un webhook pour cela. Un crochet post-réception régulier fonctionnera très bien.

Pour créer et utiliser un tel hook, il vous suffit de vous connecter sur le serveur sur lequel votre gitlab est installé et de créer une clé ssh pour l'utilisateur git.

Sudo -u git ssh-keygen -f /home/git/.ssh/reponame_key

(ne saisissez aucune phrase secrète lorsque vous y êtes invité)

Accédez à votre compte github et ajoutez la clé publique (elle a été créée en tant que /home/git/ssh/reponame_key.pub) à votre projet en tant que clé de déploiement. jetez un oeil à https://help.github.com/articles/managing-deploy-keys si vous avez besoin d'aide pour cela.

Une fois cela fait, il vous suffit de configurer la connexion entre votre serveur git et github: ajoutez un alias à la configuration ssh de l'utilisateur git (ajoutez les lignes suivantes à /home/git/.ssh/config - créez-le s'il n'est pas présent)

Host reponame  
IdentityFile /home/git/.ssh/reponame_key  
HostName github.com  
User git 

Ajoutez maintenant la nouvelle télécommande (en utilisant l'alias que vous venez de créer) à votre référentiel:

cd /home/git/repositories/namespace/reponame.git

git remote add --mirror github reponame:youruser/reponame.git

Maintenant que tout est en place, vous devrez créer le crochet réel:

cd /home/git/repositories/namespace/reponame.git/hooks

echo "exec git Push --quiet github &" >> post-receive

chmod 755 post-receive

La dernière commande est très importante car git vérifiera si un hook est exécutable avant de l'exécuter.

C'est ça!

(Remplacez le nom, l'espace de noms et votre utilisateur en fonction de vos comptes réels et profitez-en).

Dernière note: si vous voulez que votre nom et votre avatar soient validés sur github, assurez-vous que l'adresse e-mail que vous utilisez sur gitlab est également l'une des adresses encrées sur votre compte github. Sinon, vous verrez votre nom d'utilisateur gitlab.

40
novalore

Si vous n'hébergez pas votre propre GitLab, GitLab.com a introduit cette fonctionnalité directement, sans aucune solution de contournement.

  1. À partir d'un projet, utilisez l'icône d'engrenage pour sélectionner Mirror Repository
  2. Faites défiler jusqu'à Poussez vers un référentiel distant
  3. Checkmark Remote mirror repository: met à jour automatiquement les branches, balises et validations du miroir distant à partir de ce référentiel toutes les heures.
  4. Entrez le référentiel que vous souhaitez mettre à jour; pour GitHub, vous pouvez inclure votre nom d'utilisateur et votre mot de passe dans l'URL, comme ceci: https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git —Comme indiqué dans les commentaires, il est beaucoup mieux en termes de sécurité d'utiliser votre jeton d'accès GitHub ici au lieu des informations de connexion; mettra à jour la réponse lorsque j'aurai testé.
29
mlncn

Pour le traitement des WebHooks, j'utilise le serveur Web sinatra.

require 'sinatra'
post '/pew' do
  puts JSON.parse request.body.read
  # here can be placed signal code to run commit processing script
end

enregistrer le webhook pour les événements Push (ou autres) sur http://localhost:4567/pew dans GitLab et depuis ce moment sur chaque commit gitlab enverra des informations de commit à url.

1
Nikolay Ruban