Deployment using CI/CD Pipeline
CI/CD คืออะไร
CICD ย่อมาจาก Continuous Integration and Continuous Delivery อธิบายแบบสั้น ๆ ก็คือการทำให้โปรเจ็คของเราทำงานแบบอัตโนมัติทั้งหมด ตั้งแต่การ Build, Test, Packing ไปจน Deploy หรือใครจะมี flow แบบอื่นก็แล้วแต่จะใส่เข้าไป ซึ่งจะช่วยให้ developer สะดวกสะบายมากยิ่งขึ้น
สำหรับใครที่ต้องการเรียนรู้เนื้อหาเกี่ยวกับ CI/CD มากขึ้น สามารถรับชมคอร์ส AtlasX DevOps ได้ที่นี่
Build Pipeline
ในส่วนของ Build pipeline ที่ทางทีม AtlasX ได้ setup ไว้ จะเป็นไปตามรูปนี้

- Developer เขียนโค้ดแล้ว push ไปยัง GitLab repository
- Jenkins รับรู้ว่ามี code ใหม่ push เข้ามา และจะทำกระบวนการต่าง ๆ ที่อยู่ใน pipeline ซึ่งทำตั้งแต่ Build, Scan, Test จนถึงการ Deploy
- ในการ Deploy จะใช้วิธีการ copy artifacts ไปยังเครื่อง Application Server และจะดูแลจัดการ IIS ให้อัตโนมัติ
Deployment Structure
Note
สำหรับโครงการที่มีความจำเป็นต้องมี Web Application และ/หรือ Web Service มากกว่า 1 ตัว สามารถมาติดต่อทีม AtlasX เพื่อขอความช่วยเหลือในการ customize ในส่วนของ Jenkinsfile ได้
ในส่วนของโครงสร้างแอพลิเคชั่นที่เอาไป deploy จะมีการแบ่งโฟลเดอร์เป็นชื่อตาม PROJECT_NAME และภายในจะมีการแบ่ง Web Application กับ Web Service เอาไว้ ดังรูป

ในส่วนของ IIS นั้น ตัว Application จะมีการผูกไปที่โฟลเดอร์ของแอพลิเคชั่นที่เรา deploy ไว้ดังรูป

ซึ่งทั้งหมดนี้ถ้าทำผ่าน CI/CD Pipeline ก็จะสร้างโฟลเดอร์และผูกแอพพลิเคชั่นให้โดยอัตโนมัติ
Using Jenkinsfile
Note
โดยทั่วไปแล้ว Jenkinsfile จะติดมากับ template ของ project แล้ว สำหรับ Template ที่สร้างก่อนเดือน พฤษภาคม 2565 ให้ทำการ migration ดูรายละเอียด
- ติดต่อทีม AtlasX สำหรับการทำ CI/CD และ Gitlab webhooks
- แก้ไขคอนฟิกใน
Jenkinsfileให้เรียบร้อย - สร้าง Branch ใหม่ชื่อ
jenkinsและ Checkout ไปที่jenkinsจากนั้นทำการ Push ไปยังorigin - ยกถ้วยกาแฟขึ้นแล้วก็จิบ
Jenkinsfile Parameters
| Parameter | Description |
|---|---|
PROJECT_NAME | ชื่อของโปรเจกต์ซึ่งเอาไว้ระบุไดเรกทอรี่สำหรับการ deploy (เช่น AtlasX Demo). |
PROJECT_BRANCH_NAME | ชื่อ Git branch ที่มี Jenkinsfile (ค่าเริ่มต้น: jenkins) |
PROJECT_URL | Git url ของโปรเจกต์ |
PROJECT_KEY | ชื่อโปรเจกต์สำหรับระบุในรายงานของ SonarQube report และควรเป็นชื่อที่ไม่ซ้ำ (เช่น AtlasX.Web.Application). |
PROJECT_VERSION | เวอร์ชั่นของโปรเจกต์ที่เอาไว้ระบุในรายงานของ SonarQube report |
IIS_API_SERVER_URL | Endpoint ของ IIS API Server |
APPLICATION_POOL_NAME | ชื่อ Application Pool ใน IIS |
APPLICATION_NAME | ชื่อ Application ใน IIS |
BASE_HREF | Angular base href |
Jenkinsfile Migration
- ดาวน์โหลด
Jenkinsfileจากที่นี่ โดยเลือกเวอร์ชั่นให้ตรงตามประเภทของโปรเจดต์ - วาง
Jenkinsfileที่ดาวน์โหลดมาแทนที่Jenkinsfileเดิมในโปรเจกต์