Github
ในกระบวนการ CI/CD เหตุการณ์สำคัญ เช่น การบิลด์ล้มเหลว การปรับใช้เสร็จสมบูรณ์ การแจ้งเตือนการสแกนความปลอดภัย มักต้องแจ้งให้ผู้เกี่ยวข้องทราบทันที การผสานรวม EngageLab SMS เข้ากับ GitHub Actions ช่วยให้คุณทริกเกอร์การแจ้งเตือน SMS ได้ที่จุดใดก็ได้ใน Workflow เพื่อให้สมาชิกในทีมรับรู้สถานะของระบบได้ทันท่วงทีไม่ว่าจะออนไลน์อยู่หรือไม่
ข้อกำหนดเบื้องต้น
ก่อนเริ่ม โปรดตรวจสอบว่าได้กำหนดค่าต่อไปนี้เสร็จแล้ว:
ฝั่ง EngageLab
- เปิดใช้บริการ EngageLab SMS แล้ว
- สร้างเทมเพลต SMS ในหน้าการจัดการเทมเพลตและผ่านการตรวจสอบแล้ว พร้อมได้รับ ID เทมเพลต
- สร้าง API Key ในหน้า API Key แล้ว พร้อมได้รับ
dev_keyและdev_secret
ฝั่ง GitHub
- มีสิทธิ์ผู้ดูแลของที่เก็บโค้ดเป้าหมาย เพื่อกำหนดค่า Repository Secrets ได้
ขั้นตอนที่ 1: เตรียมเทมเพลต SMS
การเรียกใช้ API เพื่อส่ง SMS ต้องใช้เทมเพลตที่ผ่านการตรวจสอบล่วงหน้า ไม่รองรับการส่งข้อความที่กำหนดเองโดยตรง
เข้าสู่ระบบคอนโซล EngageLab ไปที่ SMS → การจัดการเทมเพลต และสร้างเทมเพลตใหม่ ยกตัวอย่างการแจ้งเตือนการปรับใช้ เนื้อหาเทมเพลตสามารถออกแบบได้ดังนี้:
【{{sign}}】สวัสดี ที่เก็บโค้ด {{repo}} ได้ {{status}} เมื่อ {{time}} Commit: {{commit}}
หลังจากส่งเทมเพลตแล้ว ให้รอการตรวจสอบให้ผ่าน และบันทึก ID เทมเพลตไว้ (เช่น deploy-notify-template)
คำแนะนำ: ควรสร้างเทมเพลตแยกกันสำหรับ "ปรับใช้สำเร็จ" และ "ปรับใช้ล้มเหลว" เพื่อให้ความหมายชัดเจนขึ้นและมีอัตราการผ่านการตรวจสอบสูงขึ้น
ขั้นตอนที่ 2: กำหนดค่า GitHub Secrets
เพื่อหลีกเลี่ยงการฮาร์ดโค้ดคีย์ลงในไฟล์ Workflow ต้องจัดเก็บข้อมูลที่อ่อนไหวไว้ใน GitHub Repository Secrets
เข้าไปที่หน้าที่เก็บโค้ด คลิกตามลำดับ Settings → Secrets and variables → Actions → New repository secret แล้วเพิ่มตัวแปรต่อไปนี้ทีละรายการ:
| ชื่อ Secret | คำอธิบาย |
|---|---|
ENGAGELAB_DEV_KEY |
dev_key จากหน้า API Key ของ EngageLab |
ENGAGELAB_DEV_SECRET |
dev_secret ที่ตรงกัน |
ENGAGELAB_TEMPLATE_SUCCESS |
ID เทมเพลตการแจ้งเตือนการปรับใช้สำเร็จ |
ENGAGELAB_TEMPLATE_FAILURE |
ID เทมเพลตการแจ้งเตือนการปรับใช้ล้มเหลว |
ON_CALL_PHONE |
หมายเลขโทรศัพท์ที่รับการแจ้งเตือน ต้องมีรหัสประเทศ เช่น +6591234567 |
ขั้นตอนที่ 3: เพิ่มขั้นตอนการแจ้งเตือนใน Workflow
EngageLab SMS API ใช้การยืนยันตัวตนแบบ HTTP Basic สตริงการยืนยันตัวตนสร้างจาก base64(dev_key:dev_secret) ต่อไปนี้คือตัวอย่าง Workflow ฉบับสมบูรณ์:
name: Deploy to Production
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build and test
run: |
npm install
npm test
- name: Deploy
run: ./deploy.sh
- name: Notify success via EngageLab SMS
if: success()
run: |
AUTH=$(echo -n "${{ secrets.ENGAGELAB_DEV_KEY }}:${{ secrets.ENGAGELAB_DEV_SECRET }}" | base64)
curl -s -X POST https://smsapi.engagelab.com/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Basic ${AUTH}" \
-d '{
"to": ["${{ secrets.ON_CALL_PHONE }}"],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_SUCCESS }}",
"params": {
"repo": "${{ github.repository }}",
"commit": "${{ github.sha }}",
"status": "ปรับใช้สำเร็จ",
"time": "'"$(date '+%Y-%m-%d %H:%M')"'"
}
}
}'
- name: Notify failure via EngageLab SMS
if: failure()
run: |
AUTH=$(echo -n "${{ secrets.ENGAGELAB_DEV_KEY }}:${{ secrets.ENGAGELAB_DEV_SECRET }}" | base64)
curl -s -X POST https://smsapi.engagelab.com/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Basic ${AUTH}" \
-d '{
"to": ["${{ secrets.ON_CALL_PHONE }}"],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_FAILURE }}",
"params": {
"repo": "${{ github.repository }}",
"commit": "${{ github.sha }}",
"status": "ปรับใช้ล้มเหลว",
"time": "'"$(date '+%Y-%m-%d %H:%M')"'"
}
}
}'
คำอธิบายพารามิเตอร์สำคัญ
| พารามิเตอร์ | คำอธิบาย |
|---|---|
if: success() |
ดำเนินการเฉพาะเมื่อขั้นตอนก่อนหน้าทั้งหมดของ Job ปัจจุบันสำเร็จ |
if: failure() |
ดำเนินการเฉพาะเมื่อขั้นตอนใด ๆ ของ Job ปัจจุบันล้มเหลว |
github.repository |
ตัวแปรในตัวของ GitHub รูปแบบเป็น owner/repo |
github.sha |
Commit SHA ที่ทริกเกอร์ Workflow ครั้งนี้ |
date '+%Y-%m-%d %H:%M' |
ดึงเวลาปัจจุบันของ Runner ค่าเริ่มต้นเป็นเขตเวลา UTC |
หมายเหตุ: คำสั่ง
dateจะดึงเวลาระบบของ GitHub Actions Runner (UTC) หากต้องการแสดงเวลาตามเขตเวลาท้องถิ่น โปรดตั้งค่าตัวแปรสภาพแวดล้อมTZไว้หน้าคำสั่ง ตัวอย่างเช่น:TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M'
สถานการณ์เพิ่มเติม
แจ้งเตือนผู้รับหลายราย
เปลี่ยนฟิลด์ to เป็นอาร์เรย์ เพื่อส่งไปยังหลายหมายเลขพร้อมกัน:
-d '{
"to": [
"${{ secrets.ON_CALL_PHONE }}",
"${{ secrets.TEAM_LEAD_PHONE }}"
],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_FAILURE }}",
"params": {
"repo": "${{ github.repository }}",
"commit": "${{ github.sha }}",
"status": "ปรับใช้ล้มเหลว",
"time": "'"$(date '+%Y-%m-%d %H:%M')"'"
}
}
}'
การแจ้งเตือนการสแกนความปลอดภัย
ใน Workflow ที่มีขั้นตอนการสแกนความปลอดภัย ให้แจ้งเตือนทันทีเมื่อพบช่องโหว่ความเสี่ยงสูง:
- name: Security scan
id: security
run: ./run-security-scan.sh
- name: Notify security alert via SMS
if: steps.security.outputs.high_severity == 'true'
run: |
AUTH=$(echo -n "${{ secrets.ENGAGELAB_DEV_KEY }}:${{ secrets.ENGAGELAB_DEV_SECRET }}" | base64)
curl -s -X POST https://smsapi.engagelab.com/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Basic ${AUTH}" \
-d '{
"to": ["${{ secrets.SECURITY_TEAM_PHONE }}"],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_SECURITY }}",
"params": {
"repo": "${{ github.repository }}",
"time": "'"$(date '+%Y-%m-%d %H:%M')"'"
}
}
}'
รายงานผลการทำงานของงานตามกำหนดเวลา
สำหรับ Workflow ตามกำหนดเวลาที่ทริกเกอร์ผ่าน schedule (เช่น การซิงค์ข้อมูลรายวัน การสำรองข้อมูลตามรอบ) ให้ส่ง SMS สรุปหลังทำงานเสร็จ:
on:
schedule:
- cron: '0 2 * * *' # ทำงานทุกวันเวลา UTC 02:00
jobs:
daily-sync:
runs-on: ubuntu-latest
steps:
- name: Run daily sync
run: ./daily-sync.sh
- name: Notify result via SMS
if: always()
run: |
STATUS=${{ job.status }}
AUTH=$(echo -n "${{ secrets.ENGAGELAB_DEV_KEY }}:${{ secrets.ENGAGELAB_DEV_SECRET }}" | base64)
curl -s -X POST https://smsapi.engagelab.com/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Basic ${AUTH}" \
-d '{
"to": ["${{ secrets.ON_CALL_PHONE }}"],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_DAILY }}",
"params": {
"repo": "${{ github.repository }}",
"status": "'"${STATUS}"'",
"time": "'"$(TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M')"'"
}
}
}'
if: always()หมายถึงดำเนินการไม่ว่าขั้นตอนจะสำเร็จหรือล้มเหลว เหมาะกับสถานการณ์ที่ต้องการรับประกันว่าการแจ้งเตือนต้องส่งถึงแน่นอน
ข้อควรทราบ
- เทมเพลตต้องผ่านการตรวจสอบก่อนจึงจะใช้งานได้ หากเทมเพลตอยู่ในสถานะรอการตรวจสอบหรือถูกปฏิเสธการตรวจสอบขณะเรียกใช้ API จะส่งกลับข้อผิดพลาด
4001 - รูปแบบหมายเลขโทรศัพท์ต้องมีรหัสประเทศ เช่น หมายเลขสิงคโปร์ควรเขียนเป็น
+6591234567หากไม่มี+หรือรหัสประเทศจะทำให้การส่งล้มเหลว - สตริงการยืนยันตัวตนสร้างขึ้นแบบไดนามิกในทุกครั้งที่มีคำขอ ไม่จำเป็นต้องจัดเก็บผลลัพธ์ที่เข้ารหัส Base64 ไว้ล่วงหน้า สามารถคำนวณแบบเรียลไทม์ได้โดยตรงผ่าน
echo -n "key:secret" | base64 - API ส่งกลับ HTTP 200 ไม่ได้หมายความว่าส่ง SMS สำเร็จ โปรดตรวจสอบฟิลด์
codeในเนื้อหาการตอบกลับ หากcodeเป็น0หรือไม่มี แสดงว่าปกติ หากไม่ใช่ศูนย์ ให้ดูคำอธิบายรหัสข้อผิดพลาดเพื่อตรวจหาสาเหตุ - หลีกเลี่ยงการเปิดเผยคีย์ในบันทึก (log) อย่า
echoแสดงเนื้อหาของตัวแปรAUTHโดยตรงในขั้นตอนrun










