How to Integrate GitHub or Bitbucket Webhooks with Jenkins Pipelines
Table of contents
1. Introductions
GitHub Webhooks áá˛áˇ Jenkins pipeline ááŹáááŻáˇ integration ááŻááşááźááŹáᲠáááŻááŹááᯠáĄááťááşá¸ááźáŻáśá¸áááşá¸áááşá¸ááźáąáŹááźááŤáááşá
GitHub webhook integration áááŻááşááŹá¸áᲠááŹááŹááşáĄáŹá¸ááźááˇáş áááŻáááş GitHub repo áážáŹ Code áá áşáᯠupdate push ááŻááşáááŻááşááŹáá˛áˇ Jenkins pipeline ááᯠá Run áááŻáˇáááŻáááş Manual Jenkins Console áá˛áááŻáááşááźáŽá¸ Build now áááŻáá˛áˇ Button ááᯠClick ááŻááşááąá¸áážáᏠPipeline á ááźáŽá¸ Run ááŤááááˇáşáááşáááŤá áĄááźá˛áááşá¸ááŻááşááąá¸ááąááááş áĄáááşáááźáąáááŻááşááŤáá°á¸ Automate ááŻááşááťááşáááŻáˇ CI/CD ááŻáśá¸ááźááŹá፠áááşáááŻááşáááąáŹááş Manual Step áá˝áąááᯠááťážáąáŹáˇááťáááŻááşááŹáĄááąáŹááşá¸ááŻáśá¸ááŤáá˛ááĄá˛áˇááąáŹáˇ ááŽáĄáááşáĄáá˛áááŻáˇáááŻáááŹá¸ ááŽááᯠManual Build Now áá˝áŹá¸áá˝áŹá¸áážáááşááąáááŹááᯠááźáąáááşáááŻáˇáĄáá˝ááş GitHub Webhooks áá˛áˇ Jenkins pipeline ááᯠIntegrate ááŻááşáááŻááşáááŻáˇáááŤáááşá
áᎠáážá áşáᯠIntegration á áááşáááŻáĄááŻááşááŻááşáᲠáááŻáááş Jenkins áážáŹ GitHub plugin áááŻááźáŽá¸ Install ááŻááşáááŻááşááŹáá˛áˇ Jenkins Server áážáŹ GitHub webhook URL áá áşáᯠáá˝ááşááŹááŤááááˇáşáááşá áĄá˛áˇáᎠURL ááŽááᯠGitHub webhook áááą JSON or other format payload áá áşáᯠgenerate ááŻááşááźáŽá¸ HTTP POST Method áá˛áˇ request áááŻáˇááŤáááşá áĄá˛áˇáᎠURL á GitHub ááŽá webhook payload ááᯠáááşááśááážáááŹáá˛áˇ Jenkins pipeline áááŻá ááźáŽá¸ Run ááŤáááşá áĄááŻááąáĄá˛áˇááąáŹáˇ áᎠwebhook ááᯠGitHub áâááą Jenkins Server ááŽááᯠáááşáĄááťáááşáááŻáˇáᲠáááŻáááş webhook event áá áşáᯠááźá áşáá˛áˇáĄááťáááşáááŻááşá¸áááŻáˇáááşá Webhook event áááşáĄááťáááşáážáŹááźá áşáá˛áááŻáᏠáááąáŹáˇáááşáážááşáááŻáˇááááşá áĽááᏠ- Source Code ááᯠGitHub repo ááŽááᯠpush ááŻááşáááŻááşáá˛áˇáĄááťáááşáááŻááşá¸á Pull request assigned ááźá áşáá˛áˇáĄááťáááşáááŻááşá¸á Release created ááźá áşáá˛áˇáĄááťáááşáááŻááşá¸ áĄá áážááááźááˇáşáááşáážááşáááŻáˇáááŤáááşááᎠLab áážáŹááąáŹáˇ Repo áᎠcode update push ááŻááşáá˛áˇáĄááťáááşáááŻááşá¸ webhook event áá áşááŻááźá áşááźáŽá¸ Jenkins ááŽáááŻáááŻáˇáĄáąáŹááşá ááşá¸ááźááˇáşááźááŹá¸ááŤáááşá
áááŻáážááşá¸áĄáąáŹááşááźáąáŹááááşááąáŹáˇ -
Developer áá áşááąáŹááşá GitHub repo ááŽááᯠCode Update Push ááŻááşáááşááĄá˛áˇááŽáážáŹ Webhook Event áá áşáᯠá ááźá áşááźáŽá¸ Push áááŻááşáá˛áˇ info áá áşááťááŻáˇ (áĽááᏠcommit message) áĄááąáŤáşáážáŹ base ááŻááşááźáŽá¸ JSON or other format payload áá áşáᯠGenerate ááŻááşáááşáááźáŽá¸áááş GitHub webhook áááąáá áşáááˇáş Jenkins Server áážáŹ áážáááąáá˛áˇ GitHub Webhook URL ááŽááᯠGenerate ááŻááşáááŻááşáá˛áˇ JSON or other format payload ááᯠHTTP POST Method ááŻáśá¸ááźáŽá¸áááŻáˇáááŻááşáááşá Jenkins á áᎠwebhook ááᯠáááşááśááážáááŹáá˛áˇ Pipeline ááᯠá Run áá˝áŹá¸ááŤáááşá áĄá˛áˇááąáŹáˇ Code áá áşáᯠGitHub repo áážáŹ Update push ááŻááşáááŻááşááŹáá˛áˇ Manual Build Now áááŻááźáŽá¸ Click á ááŹááááŻáᲠPipeline á áá°áˇáĄáááŻááᯠá Run áá˝áŹá¸áááş áááŻáˇáážááşáááŻáˇáááŤáááşá
Learn more about GitHub webhook and Jenkins GitHub Plugins
https://docs.github.com/en/webhooks/
https://plugins.jenkins.io/github/
2. Prerequisite
Jenkins áá˛áˇ ááááş ááááşá¸ááŽá¸ááąá¸áááşááąáŹáˇ áĄáąáŹááşáážáŹááąáŹáşááźááŹá¸áá˛áˇ article 3 ááŻááᯠáááşááźáŽá¸ Lab á ááşá¸ááźááˇáşááźáŽá¸áážáᏠáᎠwebhook integration lab ááᯠáááŻááşá ááşá¸áááŻáˇ Recommend ááąá¸ááŤáá áąá áᎠLab ááąá¸á ááąáŹáşááźá፠article 3 áᯠáá˛áˇ áĄáááŻááşá¸áááşáááŻááťááŻá¸ áááşááąá¸ááąá¸ááŹá¸ááŤáááşá
Install and Configure Jenkins Master and Jenkins Agent via SSH (Part-01)
%[https://burmesebytes.hashnode.dev/install-and-configure-jenkins-master-and-jenkins-agent-via-ssh-part-01]
Install and Configure Jenkins Master and Jenkins Agent via SSH (Part-02)
%[https://burmesebytes.hashnode.dev/install-and-configure-jenkins-master-and-jenkins-agent-via-ssh-part-02]
How to Deploy a React App on Docker with Jenkins and Docker Compose
%[https://burmesebytes.hashnode.dev/how-to-deploy-a-react-app-on-docker-with-jenkins-and-docker-compose]
Check List:
áážááşááá˝ááşáĄáąáŹááş ááŻááşááááˇáş step áá áşááťááŻáˇááᯠááťááąá¸áááŻááşááŤáááşá
GitHub Plugin Jenkins Server áážáŹ install ááŻááşááźáŽá¸ááŹá¸áážááážáážááĄáááşá á áşáááŤáááşá
Jenkins pipeline áá˛áážáŹ Build Triggers Option ááᯠEnable ááŻááşáááŤáááşá
Jenkins ááŽá webhook URL ááᯠGitHub repository áážáŹ add ááąá¸áááŤáááşá
áááááŹá¸ááážáŹáá áşááŻáááąáŹáˇ Jenkins Server á public internet access áááąáááŤáááşá public internet access áááąáážáᏠGitHub repo webhook ááŽáááą Jenkins Server ááŽááᯠHTTP request áááŻáˇáááŻáˇááážáŹááŤá
3. Check GitHub Plugins and enable Build Triggers Option in Jenkins
3.1 Check GitHub Plugins in Jenkins
Jenkins Console áá˛ááᯠáááşáááŻááşááźáŽá¸ááąáŹáˇ Manage Jenkins > Plugin > Installed Plugin áááŻáážáááşááźáŽ áĄááąáŤáşáááş Search box áážáŹ GitHub ááᯠáááŻááşáážáŹááźááˇáşááŤáááááşá ááá˝áąáˇáá°á¸áááŻáááşááąáŹáˇ available plugins áážáŹáá˝áŹá¸áážáŹááźáŽá¸ install ááŻááşááąá¸áááŻááşááŤá
Plugins link > https://plugins.jenkins.io/github/
Jenkins server áážáŹ GitHub Plugin Install ááŻááşááźáŽá¸ááŹáá˛áˇ áĄáąáŹááşááŤáĄáááŻááşá¸ github webhook url áááŻáá˝áąáˇáááŤááááˇáşáááşá
default webhook url : JENKINS_URL/github-webhook/
for example: http://your.ip:8080/github-webhook/
3.2 Enable Build Triggers Option in Jenkins pipeline
Pipeline Config áá˛áážáŹ Build Triggers Option ááᯠEnable ááŻááşááąá¸áááŻáˇáááŻááŤáááşá GitHub webhook áá˛áˇ integrate ááŻááşáááˇáş project pipeline áá˛ááᯠáá˝áŹá¸áááŻááşááŤá
ááźáŽá¸áááşááąáŹáˇ Configure áááŻáááşáá˝áŹá¸áááŻááşááŤá
General áá˛áážáŹ GitHub hook trigger for GITScm polling
áááŻááŹááąá¸áá˝áąáˇááŤááááˇáşáááş áĄáážááşááźá
áşááąá¸ááąá¸ááźáŽá¸ Save and Apply ááŻááşáááŻááşááŤá
4. Add the webhook URL in the GitHub repository.
GitHub repo áážáŹ Jenkins server ááŽá áááŹáá˛áˇ webhook url áááˇáşááąá¸ááááˇáşáĄáááˇáşáááŻááąáŹááşááŤááźáŽá ááŻáśáážáŹááźááŹá¸áá˛áˇáĄáááŻááşá¸ GitHub Setting > webhook áá˛ááᯠáá˝áŹá¸áááŻááşááŤá ááźáŽá¸áááşááąáŹáˇ Add webhook áááŻáážáááşááŤá
GitHub repo Settings > Webhooks > Add webhook
ááźáŽá¸áááşááąáŹáˇ Webhook URL áááˇáşááŤáááşá Webhook URL ááᯠááŽáááŻááşá¸áá˝áąáˇáááŤááááˇáşáááşá
for example -http://your.ip:8080/github-webhook/
áááááŹá¸ááážáŹáá áşáᯠá ááŽááŹááąá¸á፠â / âá ááąáŹááşááŻáśá¸áážáŹ
forward slash
â / â ááąáˇááťááşáá˛áˇáááŻáˇááááŤáá°á¸áhttp://your.ip:8080/github-webhook
âincorrecthttp://your.ip:8080/github-webhook/
âcorrect
áĄááŻááą payload URL ááąááŹáážáŹ ááŻáśáážáŹááźááŹá¸áá˛áˇáĄáááŻááşá¸ URL ááąá¸áááˇáşááŤáááşá ááźáŽá¸áááşááąáŹáˇ push event áááŻáᲠtrigger ááŻááşáážáŹááááŻáˇááŽáááŻááşá¸ááŹá¸áááŻááşááŤáááşá Active ááąá¸ááᯠáĄáážááşááźá áşááąá¸ááąá¸ááźáŽá¸ Add webhook ááŻááşáááŻááşááŤá
add ááŻááşáááŻááşáá˛áˇ webhook ááąá¸áá áşááŻáá˝áąáˇáááŤááááˇáşáááşá
Webhook áááŻáážáááşááźáŽá¸ááźááşáááşááźááˇáşáááŻááşááŤá Recent Deliveries áážáŹ áááááŻáśá¸test ááŻááşááŹá¸ááŹáá˝áąáˇáááŤááááˇáşáááşá
ááťážáŹá¸ááźááŹá¸ááŹááąá¸áááŻáááşáážáááşááźááˇáşáááşáááŻáááşááąáŹáˇ request áá
áşáᯠáá˛áˇ details ááᯠáá˝áąáˇáááŤááááˇáşáááşá
Response áážáŹ ááźááˇáşááźááˇáşá፠200 ááźááąáááş webhook request áĄáááşááźáąááŤáááşáRedeliver ááᯠáážáááşááźáŽá¸ webhook request áááşáááŻáˇááźáŽá¸ á
ááşá¸ááźááˇáşáááŻáˇáááŤááąá¸áááşá
áĄááŻáááŻáááşááąáŹáˇ GitHub repo áážáŹ webhook configuration áĄáááşááźáąáá˝áŹá¸ááŤááźáŽá
5. Commit and push the changes to your GitHub repository
áĄáŹá¸ááŻáśá¸ááźáŽá¸áá˝áŹá¸ááźáŽáááŻáááşááąáŹáˇ Code áá
áşáᯠchanges ááŻááşááźááˇáşááźáŽá¸ GitHub repository ááŽááᯠpush ááŻááşááźááˇáşááŤáááşá ááťá˝ááşááąáŹáş áááąáŹáˇ src
áĄáąáŹááşá App.js
áá˛á code line number 10 áážáŹ edit ááŻááşááźáŽá¸ push ááŻááşáááŻááşááŤáááşá
git commit -a -m "updated app.js - successfully deployed using Jenkins webhook"
git push origin master
6. Check the pipeline to verify that it runs automatically.
GitHub repo áᎠcode update push ááŻááşááźáŽá¸ááŹáá˛áˇ pipeline áá˛áááŻááŹááźááˇáşáááŻááşááŤáJenkins Pipeline áᏠáá°áˇáĄáááŻááᯠRun áá˝áŹá¸ááŹááᯠáá˝áąáˇáááŤááááˇáşáááşá
ááąááťáŹáá˝áŹá¸áĄáąáŹááş browser áááą Deploy ááŻááşáááŻááşáá˛áˇ
Application update ááᯠáá˝áŹá¸ááźááˇáşáááŻááşááŤáááşá
áĄáááş Lab áážáŹááŤáá˛áˇ react app ááᯠdocker-compose áá˛áˇ Deploy ááŻááşááźááŹá¸ááŹááŤá
áĄááŻáááŻáááşááąáŹáˇ GitHub webhook áá˛áˇ Jenkins pipeline integration ááŻááşáᏠáĄáąáŹááşááźááşáá˝áŹá¸ááŤááźáŽá Developer á Code update ááᯠGitHub repo ááŽááᯠpush ááŻááşáááŻááşááŹáá˛áˇ Jenkins pipeline á manual Build Now áááş áážáááşá ááŹááááŻáˇáᲠautomatically run áá˝áŹá¸ááŤááźáŽá
GitHub webhook áá˛áˇ Jenkins GitHub Plugins ááᯠááŽáážáŹáááşááźáŽá¸ ááąáˇááŹááźááˇáşáááŻááşááŤáááşá
https://docs.github.com/en/webhooks/
https://plugins.jenkins.io/github/
7. Note for Bitbucket webhook
7.1 Jenkins Bitbucket Plugins
Bitbucket ááŻáśá¸áá˛áˇáá°áá˝áąáĄáá˝ááşááááşá¸áááşá¸áááşá¸áĄáá°áá°ááŤáᲠPlugin ááąá¸áᲠáá˝áŹáá˝áŹá¸ááŹááŤáBitbucket áááąáŹáˇ áĄáąáŹááşá Plugin áááŻáĄááŻáśá¸ááźáŻááážáŹááŤá
Bitbucket plugins > https://plugins.jenkins.io/bitbucket/
7.2 Enable Build Triggers Option in Jenkins pipeline
Plugin install ááŻááşááźáŽá¸áá˝áŹá¸áááşááąáŹáˇ Pipeline > Configuration áá˛ááᯠááźááşáá˝áŹá¸ááźáŽá¸Build when a change is pushed to BitBucket
áááŻááŹáááŻáĄáážááşááźá
áşááąá¸áá˛áˇáááşáááŤááźáŽá
7.3 Add the webhook URL in the Bitbucket repository.
Bitbucket repo áážáŹ Webhook URL áááˇáşáááşáááŻáááşááąáŹáˇ áááşáááşááźááşá¸áážáŹáážááá˛áˇááźááşá¸ Repository Settings áá˛áááŻáá˝áŹá¸áááŻááşááŤá
ááźáŽá¸áááşááąáŹáˇ Webhooks áááŻááźáŽá¸áá˝áąáˇááŤááááˇáşáááşá Add Webhook áááŻááźáŽá¸ add áááŻááşááŤá
áĄááŻá Bitbucket Plugins install ááŻááşáááŻááşááŹáá˛áˇ webhook URL áá
áşáᯠáááŤááááˇáşáááşá
for example http://your.ip:8080/bitbucket-hook/
áááááŹá¸ááážáŹáá áşáᯠá ááŽááŹááąá¸á፠â / âá ááąáŹááşááŻáśá¸áážáŹ forward slash â / â ááąáˇááťááşáá˛áˇáááŻáˇááááŤáá°á¸á
http://your.ip:8080/bitbucket-hook
âincorrecthttp://your.ip:8080/bitbucket-hook/
âcorrect
Push event áááŻáᲠtrigger ááŻááşáááŻááşááŤáááşááźáŽá¸áááş active ááᯠáĄáážááşááźá áşááźáŽá¸ save áááŻááşááŤáááşá
ááŤáááŻáááşááąáŹáˇ Bitbucket áĄáá˝ááşáááşá¸ áĄáááşááźáąáá˝áŹá¸ááŤááááˇáşáááş step áá˝áąáĄáŹá¸ááŻáśá¸ááŽá¸ááŤáááąáŹáˇ GitHub áá˛áˇ áĄáá°áá°ááŤáá˛á Bitbucket plugin link áážáŹáááşá¸ áĄááąá¸á áááşáá˝áŹá¸ááźááˇáşáááŻááşááŤáááşááĄáŹá¸ááŻáśá¸ááŻáśá¸ááťáąá¸áá°á¸áááşááŤáááşá
Learn more about Bitbucket plugins > https://plugins.jenkins.io/bitbucket/
Thank you for taking the time to read this article! Feel free to connect and share your thoughts or questions. I will also share more on the topic of Jenkins.
Subscribe to my newsletter
Read articles from Wai Yan Soe directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by