Crochet POST sur Bitbucket

Comment utiliser l’URL POST dans bitbucket sur Jenkins privé?

J’ai rencontré des problèmes avec bitbucket et leur post-commit.

La description :

http://username:[email protected]/job/myproject/build?token=mytoken

J’ai une instance de jenkins, je voudrais déclencher sur push sur certains référentiels. Les jenkins étant accessibles depuis l’extérieur (le World Wide Web), ils sont protégés par le système utilisateur / mot de passe habituel.

Lorsque vous travaillez avec Github, je peux définir le nom d’utilisateur et le mot de passe directement dans l’URL. Lors de la vérification des journaux nginx, il est clair que github est capable de convertir cette URL pour se connecter à l’utilisateur. Bitbucket ne l’est pas.

Voici quelques journaux nginx montrant le problème.

Journaux de publication de Bitbucket:

 - - "POST /job/myproject/build?token=mytoken HTTP/1.1" 403 216 "-" "Bitbucket.org" 

La partie intéressante est l’erreur 403. Accès refusé.

Mêmes logs pour le post hook de Github :

 - github - "POST /job/myproject/build?token=mytoken HTTP/1.1" 302 0 "-" "-" 

Comme les journaux le montrent, github est le nom de l’utilisateur que j’ai créé avec les bons droits pour lancer des builds.

Que puis-je faire pour activer le post-crochet?

Si vous voulez que BitBucket déclenche l’exécution d’un travail Jenkins après un commit dans votre repository, vous avez deux options:

  • Utilisez le crochet POST
  • Utilisez le hook Jenkins

Les deux utilisent l’API Jenkins pour déclencher le travail.

Pour le hook POST, vous devez essentiellement créer l’URL comme ceci:

 https://USER:APITOKEN@JENKINS_URL/job/JOBNAME/build?token=TOKEN 

où:

  • USER : est l’utilisateur de Jenkins qui déclenchera le travail
  • APITOKEN : est un jeton associé à cet utilisateur pour permettre l’utilisation de l’API, vous pouvez l’obtenir depuis la page de configuration de l’utilisateur dans Jenkins
  • JENKINS_URL : l’URL de votre serveur jenkins
  • JOBNAME : le nom du travail
  • TOKEN : le jeton associé au job, vous devez l’append dans la page de configuration du job (activer les déclencheurs distants)

Ce qui est cool, c’est que vous pouvez vérifier si cela fonctionne simplement en utilisant curl de la console.

Notez également qu’il n’y a pas de mot de passe dans l’URL, vous avez plutôt l’API TOKEN, ceci pour éviter de publier votre utilisateur et votre mot de passe. Quelque chose d’autre que vous pouvez faire pour améliorer un peu la sécurité, si vous avez des droits d’administrateur sur le serveur Jenkins, créez un nouvel utilisateur avec des droits d’access pour lire et créer des travaux, et utilisez-le uniquement pour cela. Vous n’avez donc pas à publier votre propre utilisateur et jeton, qui peuvent avoir des droits d’administrateur.

Le hook Jenkins fonctionne de la même manière, en construisant la même URL pour vous, mais vous n’avez pas la possibilité de le tester (par exemple, en utilisant curl).

Ceci est basé sur ces documents:

  • Jenkins Remote Access API (soumission de travaux)
  • Jenkins hook management (consultez les commentaires)
  • Accrocher BitBucket avec Jenkins (c’est TRES utile si vous voulez essayer le hook Jenkins)

J’espère que cela aide.

Ger

Cela ne répond pas vraiment à votre question, mais suggère une autre approche. Bitbucket.org et github.com prennent tous deux en charge les clés ssh.

Voir ” Configurer SSH pour Git ”

Il est important de configurer ssh-agent (expliqué dans cette page), car sans cela, il vous sera demandé d’entrer une phrase de passe à la place du nom d’utilisateur et du mot de passe.