How to Integrate GitHub or Bitbucket Webhooks with Jenkins Pipelines

Wai Yan SoeWai Yan Soe
5 min read
💡
CI/CD Tools တွေကို အခုမှ စလေ့လာနေတဲ့ သူတွေအတွက် အထောက်အကူ ဖြစ်စေဖို့ရည်ရွယ်ပါတယ်။ 😊

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 ခု ရဲ့ အပိုင်းဆက်လိုမျိုး ဆက်ရေးပေးထားပါတယ်။

  1. 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]

  2. 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]

  3. 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 ←incorrect
http://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 ←incorrect
http://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.

0
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

Wai Yan Soe
Wai Yan Soe