Skip to main content

Command Palette

Search for a command to run...

Github actions workflow for building and deploying spring boot app

Updated
3 min read
Github actions workflow for building and deploying spring boot app

ကျွန်တော်တို့ ရေးထားတဲ့ app တွေကို server တွေပေါ် build and deploy လုပ်တာကို manual အစား github actions ကို အသုံးပြုပြီး automate လုပ်ထားလို့ရပါတယ်။ code block က yml config က build and deploy လုပ်ဖို့ လိုအပ်တဲ့ steps အပြည့်အစုံပါ။ ကျွန်တော် workflow ရဲ့အဓိကအပိုင်းလေးတွေပဲ ပြောပြသွားပါမယ်။ Details နဲ့ လုပ်လို့ရတာတွေ ပိုသိအောင် official github actions docs မှာ ဖတ်ကြည့်တာကောင်းပါတယ်

name: Buid & Deploy

run-name: Build and deploy by @${{ github.actor }}

on: workflow_dispatch

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Setup Java JDK
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: '21'

    - name: Build with Maven
      run: mvn install

    - name: Archive production artifacts
      uses: actions/upload-artifact@v4
      with:
        name: application artifacts
        path: marketplace-application/target/

  deploy:
    needs: build
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - uses: actions/download-artifact@v4
      with:
        name: application artifacts
        path: marketplace-application/target/

    - name: Upload to hosting
      uses: appleboy/scp-action@v0.1.7
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.KEY }}
        source: "marketplace-application/target/marketplace-application-1.0.0.jar"
        target: "/opt/marketplace/backend"
        strip_components: 2
        overwrite: true

    - name: Executing remote ssh commands
      uses: appleboy/ssh-action@v1.0.3
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.KEY }}
        script: |
          sudo systemctl restart marketplace-backend

1. ဒီ workflow ကို ဘယ်အချိန်မှာ run မှာလည်းဆိုတာ သတ်မှတ်ပေးရပါတယ် ကျွန်တော် ထားထားတဲ့ on: workflow_dispatch က manual run မယ်လို့ပြောတဲ့သဘောပါ အဲ့တာကြောင့် ကိုယ်က web ကပဲ ဖြစ်ဖြစ် CLI ကပဲ ဖြစ်ဖြစ် run ချင်တဲ့အခါ trigger သွားလုပ်ပေးရပါတယ်။ တစ်ခြား branch push, release, issue, cron etc., event တွေများကြီးရှိပါတယ် docs မှာဖတ်ကြည့်ပါ။

2. ကိုယ် run မဲ့ jobs တွေ သတ်မှတ်ပေးရပါတယ်။ ကျွန်တော်က build and deploy ဆိုပြီး job နှစ်ခုခွဲထားပါတယ်။ အရင်ဆုံး application ကို build လုပ်မယ် သူ‌ success ဖြစ်မှ deploy တာကို ဆက်လုပ်မယ်ပေါ့ deploy job မှာ build job ကို needs ဆိုပြီးသတ်မှတ်ထားတာဖြစ်တဲ့အတွက် deploy run ဖို့ build job success ဖြစ်မှရမယ်ပေါ့။ job ထဲမှာ runs-on ဆိုတာက ကိုယ် run မဲ့ runner VM ပါ တစ်ခြား သူ support တာတွေရှိပါတယ်။ ပြီးတော့ jobs တွေထဲမှာ ဘာပြီးဘာလုပ်မယ်ဆိုတဲ့ steps တွေသတ်မှတ်ရပါတယ်။ အဲ့ steps တွေထဲမှာ လိုအပ်တဲ့ process အတွက် သူများလုပ်ပြီးသား actions လေးတွေပြန်သုံးလို့ရပါတယ် သက်သာတာပေါ့ ကိုယ်တိုင် လုပ်ချင်လည်းရပါတယ် အချိန်တော့ကုန်တာပေါ့။

build job ထဲမှာ ကိုယ် ရဲ့ repo ကို runner ပေါ် checkout ဖို့အတွက် checkout actions သုံးတယ် spring boot build ဖို့အတွက် java setup action သုံးတယ် ပြီးတော့မှ maven install command run ပြီး build တယ် output ထွက်လာတဲ့ application jar file ကို deploy job မှာသုံးဖို upload artifact action ကိုသုံးပြီး သိမ်းထားလိုက်တယ်။

deploy job ရောက်တော့ ခုဏက သိမ်းထားတဲ့ file ကို ပြန်ယူဖို့ download artifact action ကိုသုံးတယ် ပြီးတော့ အဲ့ဒီ file ကို server instant ပေါ် scp နဲ့ upload ဖို့ appleboy/scp-action ကိုသုံးတယ် ဒီနေရာမှာ server instance နဲ့ ချိတ်ဆက်ဖို့ ssh credentials တွေထည့်‌ပေးဖို့ လိုလာတယ် အဲ့တာကြောင့် host ရယ် username ရယ် private key ရယ်ကို actions secret အနေနဲ့ repository setting ထဲမှာ key-value သွားသတ်မှတ်ပြီး ဒီမှာပြန်သုံးရပါတယ် အရေးကြီး credentials တွေဖြစ်လို့ ဒီ workflow file ထဲမှာ မရေးပါနဲ့ actions secret အနေနဲ့ သွားထားပြီး ဒီမှာပြန်သုံးပါ။ scp နဲ့ upload ပြီးတော့ application ကို တစ်ခါထည်း run ဖို့ server instance ကို ssh login ဝင်ဖို့အတွက် appleboy/ssh-action ကို သုံးတယ် credentials တွေကတော့ scp နဲ့တူတူပါပဲ ပြီးတာနဲ့ application run command ကို script မှာ သတ်မှတ်ပေးလိုက်ရင်ရပါပြီ ကျွန်တော်က systemd အနေနဲ့ server မှာ သတ်မှတ်ထားလို့ systemctl နဲ့ run ပါတယ် ကိုယ်က တစ်ခြားပုံစံလုပ်ထားရင် တော့ command မတူဘူးဖြစ်ပါလိမ့်မယ်။

အကယ်၍ deploy မှာတစ်ခုခု ကြောင့် failed သွားလည်း build ကို ပြန်မ run ပဲ deploy ပဲ re-run ပြန်လုပ်လည်းရပါတယ်။

နောက်တစ်ခုရှိတာက server instance တွေဘက်က ssh အတွက် firewall rule မှာ ip allow ဖို့အတွက်ကျ github hosted runner တွေ က ip တွေ အများကြီးဆိုတော့ အဆင်မပြေဘူး ကြည့်ချင်ရင်ကရတယ် CIDR range တွေနဲ့ ပေးထားတယ် ဒါပေမဲ့ သူလည်း recommend မပေးဘူး။ အဲ့တော့ ကျွန်တော်ကတော့ လုပ်တဲ့အချိန်ခဏ * နဲ့ဖွင့်လိုက်တယ် 🥲။ self hosted runner နဲ့ enterprise runner သုံးနိုင်ရင်တော့ အဆင်ပြေပါတယ်။

တစ်ခြား application deployment တွေလည်း သဘောတရားအတူတူဖြစ်တော့ လုပ်ကြည့်လို့ အဆင်ပြေပါလိမ်မယ် ကိုလုပ်ရမဲ့ steps တွေ အဓိကသိရင်အဆင်ပြေပါပြီ။ အရေးကြီး credentials တွေသတိထားပေးပါ။ Happy learning...

More from this blog

Infrastructure ကိုင်ပြီး အိပ်ရေးမပျက် ချင် လျှင် ဒါမျိုး Alarms လုပ် 🔥🔥🔥

High Level ရေးထားတာပါ ဒါပေမဲ့ လွယ်ပါတယ် ​ကိုယ့်မှာ AWS Infra တွေရှိတယ်ဆို တွေ့သမျှ metric တွေကို alarms တွေလုပ်ပြီး notification ယူမနေဘဲ တကယ် effective ဖြစ်တဲ့ metric တွေကိုမှ CloudWatch ရဲ့ alarm feature တွေနဲ့ ပေါင်းပြီး ပို့စေချင်ပါတယ်။ ​ဥပမာ prod...

Jan 17, 20263 min read151
Infrastructure ကိုင်ပြီး အိပ်ရေးမပျက် ချင် လျှင်  ဒါမျိုး Alarms လုပ် 🔥🔥🔥

How to connect On Premises Network and Cloud (AWS)? (Part-2)

ကိုယ့်ရဲ့ ‌data center (on-prem) network နဲ့ AWS ချိတ်ဆက်ဖို့ လိုလာပြီဆိုရင် ဘယ်လို ချိတ်ဆက်ကြမလဲ? အပိုင်း (၂) မှာ တော့ Direct connect အကြောင်းကို ဆွေးနွေး သွားမှာ ဖြစ်ပါတယ်။ အပိုင်း (၁) Site-to-site VPN အကြောင်းကို လေ့လာချင်ရင်တော့ အောက်ပါ link မှာ ...

Dec 20, 20253 min read222
How to connect On Premises Network and Cloud (AWS)? (Part-2)

How to connect On Premises Network and Cloud (AWS)? (Part-1)

ကိုယ့်ရဲ့ ‌data center (on-prem) network နဲ့ AWS ချိတ်ဆက်ဖို့ လိုလာပြီဆိုရင် ချိတ်ဆက်နိုင်တဲ့ နည်း (၂) နည်း ရှိပါတယ်။ 1. Site-to-Site VPN (Virtual Private Network) 2. Direct connect Site-to-Site VPN - On-prem network နဲ့ AWS resources တွေ ချိတ်ဆက်တဲ့...

Dec 12, 20252 min read261
How to connect On Premises Network and Cloud (AWS)? (Part-1)

Accessibility for Designer

လွန်ခဲ့တဲ့အပတ်က ရုံးက Designer တွေနဲ့ တော်ကီပွားရင်း Accessibility နဲ့ပတ်သတ်တာတွေ သူတို့ကို ရှင်းပြဖြစ်တယ်။ ကိုယ်တိုင်ကလည်း အရင်ကတည်းက ဒီ topic ကိုစိတ်ဝင်စားလို့ လေ့လာနေတာဆိုတော့ အခွင့်အရေးရရင် ရသလို sharing လုပ်ဖြစ်တယ်။ အဓိကက Accessibility နဲ့ပတ်သတ်...

Nov 21, 20253 min read67
Accessibility for Designer

VPC Endpoint

အားလုံးဘဲ မင်္ဂလာပါ။ ဒီနေ့ sharing လုပ်ပေးချင်တာကတော့ VPC Endpoint အကြောင်းဘဲဖြစ်ပါတယ်။ VPC Endpoint ဆိုတာ VPC နဲ့ AWS services တွေ ကို public Internet ကို အသုံးမပြုဘဲနဲ့ Privately connect လုပ်ပေးတာ ဖြစ်ပါတယ်။ Internet Gateway, NAT Gateway နဲ့ Public...

Nov 18, 20252 min read88
VPC Endpoint
M

Myanmar Technical Blog

108 posts

Cloud, Linux, DevOps, Docker, Security အစရှိတဲ့ နည်းပညာများ အကြောင်းကို မြန်မာလို ပြန်လည်မျှဝေပေးမယ့် Blog ပဲဖြစ်ပါတယ်ခဗျာ...