CI/CD

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 ไว้ จะเป็นไปตามรูปนี้

AtlasX DevSecOps Pipeline for Web
  1. Developer เขียนโค้ดแล้ว push ไปยัง GitLab repository
  2. Jenkins รับรู้ว่ามี code ใหม่ push เข้ามา และจะทำกระบวนการต่าง ๆ ที่อยู่ใน pipeline ซึ่งทำตั้งแต่ Build, Scan, Test จนถึงการ Deploy
  3. ในการ Deploy จะใช้วิธีการ copy artifacts ไปยังเครื่อง Application Server และจะดูแลจัดการ IIS ให้อัตโนมัติ

Deployment Structure

Note

สำหรับโครงการที่มีความจำเป็นต้องมี Web Application และ/หรือ Web Service มากกว่า 1 ตัว สามารถมาติดต่อทีม AtlasX เพื่อขอความช่วยเหลือในการ customize ในส่วนของ Jenkinsfile ได้

ในส่วนของโครงสร้างแอพลิเคชั่นที่เอาไป deploy จะมีการแบ่งโฟลเดอร์เป็นชื่อตาม PROJECT_NAME และภายในจะมีการแบ่ง Web Application กับ Web Service เอาไว้ ดังรูป

AtlasX DevSecOps Deployment Structure

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

AtlasX DevSecOps IIS

ซึ่งทั้งหมดนี้ถ้าทำผ่าน CI/CD Pipeline ก็จะสร้างโฟลเดอร์และผูกแอพพลิเคชั่นให้โดยอัตโนมัติ

Using Jenkinsfile

Note

โดยทั่วไปแล้ว Jenkinsfile จะติดมากับ template ของ project แล้ว สำหรับ Template ที่สร้างก่อนเดือน พฤษภาคม 2565 ให้ทำการ migration ดูรายละเอียด

  1. ติดต่อทีม AtlasX สำหรับการทำ CI/CD และ Gitlab webhooks
  2. แก้ไขคอนฟิกใน Jenkinsfile ให้เรียบร้อย
  3. สร้าง Branch ใหม่ชื่อ jenkins และ Checkout ไปที่ jenkins จากนั้นทำการ Push ไปยัง origin
  4. ยกถ้วยกาแฟขึ้นแล้วก็จิบ

Jenkinsfile Parameters

ParameterDescription
PROJECT_NAMEชื่อของโปรเจกต์ซึ่งเอาไว้ระบุไดเรกทอรี่สำหรับการ deploy (เช่น AtlasX Demo).
PROJECT_BRANCH_NAMEชื่อ Git branch ที่มี Jenkinsfile (ค่าเริ่มต้น: jenkins)
PROJECT_URLGit url ของโปรเจกต์
PROJECT_KEYชื่อโปรเจกต์สำหรับระบุในรายงานของ SonarQube report และควรเป็นชื่อที่ไม่ซ้ำ (เช่น AtlasX.Web.Application).
PROJECT_VERSIONเวอร์ชั่นของโปรเจกต์ที่เอาไว้ระบุในรายงานของ SonarQube report
IIS_API_SERVER_URLEndpoint ของ IIS API Server
APPLICATION_POOL_NAMEชื่อ Application Pool ใน IIS
APPLICATION_NAMEชื่อ Application ใน IIS

Jenkinsfile Migration

  1. ดาวน์โหลด Jenkinsfile จากที่นี่ โดยเลือกเวอร์ชั่นให้ตรงตามประเภทของโปรเจดต์
  2. วาง Jenkinsfile ที่ดาวน์โหลดมาแทนที่ Jenkinsfile เดิมในโปรเจกต์