Trigger Jenkins multibranch pipeline met curl of webhook

Door Pieter Vogelaar 28 Augustus 2018

Jenkins jobs die gebruikmaken van de veelgebruikte git-plugin, kunnen op afstand worden getriggerd met curl of een webhook. In de job moet de optie "Poll SCM" zijn ingeschakeld. Dat is alles wat nodig is om push-triggers te activeren; er hoeft geen timer geconfigureerd te worden. Jobs worden alleen uitgevoerd als er een daadwerkelijke wijziging in de broncode is. Natuurlijk kun je wel een timer instellen als je ook periodiek wilt pullen.

Een voorbeeld van een curl commando om alle jobs te triggeren die de repository-URL ssh://git@bitbucket.mycompany.example/demo/my-api.git in Git SCM hebben geconfigureerd en “Poll SCM” hebben aanstaan:

curl 'http://jenkins.mycompany.example/git/notifyCommit?url=ssh://git@bitbucket.mycompany.example/demo/my-api.git' --user 'jenkins-trigger:mysecrettoken123'

Let op: “mysecrettoken123” is niet het wachtwoord van de aangemaakte “jenkins-trigger” gebruiker, maar een API-token. Deze kan worden gegenereerd op de configuratiepagina /user/jenkins-trigger/configure van de gebruiker.

Multibranch pipelines hebben de link “Scan Multibranch Pipeline Now”. We zochten op internet naar een manier om dit te doen via een API-call, curl of een webhook. Het verraste ons dat het zo lastig was om een goede oplossing te vinden; er zijn veel verouderde en onoverzichtelijke oplossingen in omloop.

Maar wederom schiet het “/git/notifyCommit” endpoint te hulp! Als de bovenstaande repository is geconfigureerd in de multibranch pipeline job, dan kan exact hetzelfde curl commando worden gebruikt! Multibranch pipelines hebben geen “Poll SCM” optie, dus die stap kan worden overgeslagen. Je krijgt ditmaal waarschijnlijk de volgende output: “No git jobs using repository”. Maar dat is een foutieve melding voor multibranch pipelines. Als je de multibranch job opent, zul je zien dat exact de branch waarin je een wijziging hebt gemaakt, wordt uitgevoerd vlak nadat je het curl commando hebt aangeroepen!

Bitbucket branch source plugin

De bovenstaande oplossing werkt alleen met de generieke Git branch source. De Bitbucket branch source plugin wordt hier niet door getriggerd, omdat deze een ander endpoint gebruikt: /bitbucket-scmsource-hook/notify. Daarnaast moet het endpoint niet alleen worden aangeroepen, maar vereist het ook een daadwerkelijke payload. Er is ingebouwde ondersteuning voor Bitbucket Cloud webhooks. Voor Bitbucket Server wordt de add-on Post Webhooks for Bitbucket aanbevolen, welke goed wordt onderhouden.

Als je Bitbucket Server / Stash te oud is, kan de generieke Git branch source een goede oplossing zijn. Een van de functies van de Bitbucket branch source plugin is het bijwerken van de build status per commit in Bitbucket. Om dit te bereiken met de generieke Git branch source, heb je de Stash notifier plugin nodig.

Zoek je een partner met deze expertise voor jouw project?
Vogelaar Solutions helpt organisaties met DevOps, platform engineering en web development. Neem contact op voor een vrijblijvend gesprek.