Create Azure Pipeline
ในขั้นตอนนี้กระบวนการทั้งหมดจะเกิดขึ้นภายในระบบ tfs-git.psu.ac.th หรือ Azure Devops
Pipeline เปรียบเสมือนสายพานเครื่องจักร Task เป็น Job ที่ Agent จะต้องทำตามลำดับที่ได้ตั้งไว้ การใช้งาน Pipeline นี้จะใช้สำหรับการทำ Automated test หรือการ Build Image เพื่อนำไปใช้กับการทำ Pull request เช่น
Scenario ตัวอย่างการใช้ Pipeline ทำงานร่วมกับการพัฒนาและส่งมอบ
ใช้ build and push image
เป็นการใช้ Pipeline เพื่อทำการ publish แทนการกดจาก Visual Studio และนำ Image ไปเก็บให้ตามการตั้งค่า Task
Verify code ก่อนการ Deploy
เป็นการใช้ pipeline ในการ build และทำไปทดสอบ Automated test หลังจากมีการสร้าง pull request จะสั่งให้ pipeline ทำงานโดยอัตโนมัติ ซึ่งผลลัพธ์ของ pipeline จะบอกว่า module หรือ code ชุดที่ทำมา Test โดน Automated test แล้วผ่านและ Build แล้วไม่มี Error จึงจะอนุญาตให้ complete pull request นั้นและ merge code ได้
Test site deploy และทำการทดสอบแบบละเอียด
คล้ายกับ Scenario ก่อนหน้าแต่ก่อนจะทำ Automated Test นั้น Pipeline จะ Build และสร้าง Image ขึ้นมาแล้วทำการสร้าง Server node จำลองเพื่อ Deploy application จริงเสมือนการทำงานบน Production และทำการทดสอบ Automated test ตั้งแต่ Unit test ไปจนถึง End-to-End test การทำแบบนี้จะช่วยให้เราการันตีได้ว่าการเปลี่ยน source code ทุกครั้งจะไม่กระทบการทำงานกับ module อื่น ๆ รวมถึงการันตีว่าระบบจะสามารถทำงานต่อกันได้อย่างราบรื่น แต่จะต้องแลกมาด้วยระยะเวลาเนื่องจากจะมีการ Deploy ใน site tesะ และ run script automated test ซึ่งอาจจะใช้เวลาหลายชั่วโมง
การสร้าง Pipeline
หลังจากลงชื่อเข้าใช้ให้เข้าไปที่โปรเจคที่ต้องการจะสร้าง pipeline มีขั้นตอนดังนี้
- เลือกเมนู
pipelines
และกดCreate Pipeline
- ขั้นตอน "Where is your code?" เลือก
Other git
- ขั้นตอนการ Select source เลือก
Azure Repos Git
- เลือก Git Repository ที่ใช้และเลือก Branch ที่ต้องการจะ Publish
- ขั้นตอน "Choose a template" เลือก
Docker container
และกด Apply
Configure Pipeline Tasks
หลังจากสร้าง pipeline แล้วจะต้องทำการ setup task การทำงานให้กับ pipeline ตัวอย่างนี้เป็นเพียงการ build and push image to registry ตัวอย่าง template docker เริ่มต้นจะเป็นการ publish ด้วย docker แต่เราจะใช้ส่วนของ task docker-compose ดังนั้นท่านใดที่ต้องการใช้เพียงแค่ docker สามารถดำเนินการตั้งค่า task เริ่มต้นต่อได้เลย ซึ่งจะประกอบด้วย Build an image
task และ Push an image
task จบกระบวนการ publish docker image สำหรับการ publish ด้วย docker-compose มีขั้นตอนดังนี้
- ตั้งชื่อ Pipeline
- ตั้งค่า Agent pool เป็น agent ที่ได้สร้างไว้ ถ้ามองไม่เห็นสามารถกด refresh ด้านขวาได้
- ลบ task
Push an image
โดยการคลิกที่ Task และแทบตั้งค่าด้านขวาจะมีปุ่มลบRemove
Task 1: Login
เพื่อป้องกันปัญหา agent ไม่สามารถ access GitLab ได้ให้เปลี่ยนหรือสร้าง task docker ปรับ Task version เป็น 2.*
และกำหนด container registry ที่ได้สร้างไว้ เปลี่ยน command เป็น login
Task 2 : Build application
- กด
+
ที่ "Agent job 1" - ค้นหาในช่อง search ว่า "docker compose"
- กด
Add
ใน Task ที่ชื่อ Docker compose - ตั้งชื่อว่า "Build Application"
- เลือก Container Registry Type เป็น
container registry
และเลือก container registry ที่สร้าง - เลือกไฟล์
docker-compose.yml
ภายใน Project หรือ Solution - ถ้ามีไฟล์ override
docker-compose.override.yml
หรือไฟล์ที่ override ด้วยชื่อ environment ให้ใส่ชื่อไฟล์ที่ Additional Docker Compose Files เช่นdocker-compose.Staging.yml
- หากต้องการกำหนดตัวแปร environment สรมารถเพิ่มได้ที่
Environment Variables
- เลือก Action เป็น
Build service images
- Additional Image Tags ให้กำหนดว่า
$(Build.SourceBranchName)_$(Build.BuildNumber)
- เลือก
Include Latest Tag
Task 3: Push Images
การตั้งค่าจะเหมือนกับการตั้งค่าใน Task ที่ 2 แต่จะมีการเปลี่ยน Action เป็น Push service images
แทน
- กด
+
ที่ "Agent job 1" - ค้นหาในช่อง search ว่า "docker compose"
- กด
Add
ใน Task ที่ชื่อ Docker compose - ตั้งชื่อว่า "Push Images"
- เลือก Container Registry Type เป็น
container registry
และเลือก container registry ที่สร้าง - เลือกไฟล์
docker-compose.yml
ภายใน Project หรือ Solution - ถ้ามีไฟล์ override
docker-compose.override.yml
หรือไฟล์ที่ override ด้วยชื่อ environment ให้ใส่ชื่อไฟล์ที่ Additional Docker Compose Files เช่นdocker-compose.Staging.yml
- หากต้องการกำหนดตัวแปร environment สรมารถเพิ่มได้ที่
Environment Variables
- เลือก Action เป็น
Push service images
- Additional Image Tags ให้กำหนดว่า
$(Build.SourceBranchName)_$(Build.BuildNumber)
- เลือก
Include Latest Tag
(optional) Automated CI Trigger pipeline setting
ขั้นตอนนี้สามารถข้ามได้ถ้าไม่ต้องการให้ Pipeline ทำงานทุกครั้งที่ source code ใน branch ที่กำหนดมีความเปลี่ยนแปลง การตั้งค่า Triggers สามารถทำได้ดังนี้
- เลือก Tab ชื่อ
Triggers
- เลือก
Enable continuous integration
- ตั้งค่า Branch filters โดยให้เลือกว่า Branch ใดบ้างที่ต้องการให้ Pipeline ทำงาน เช่น กำหนดให้
Type: Include
และBranch specification: develop
จะเป็นการกำหนดให้ Pipeline ทำงานทุกครั้งที่มี source code ที่ branch develop มีการเปลี่ยนแปลง
Save
บันทึกการสร้าง Pipeline โดยการกดปุ่ม Save
ถัดจาก Tab History เป็นอันจบสำหรับการสร้าง Pipeline หลังจากบันทึกแล้วจะมองเห็น Pipeline ที่เมนู Pipelines แถบซ้ายมือ
สามารถกดเข้าไปเพื่อดูรายละเอียดของ Pipeline ได้ว่ามีประวัติการทำงานวันไหน สถานะเป็นอย่างไร รันโดยใช้ source code จาก branch ไหนและสามารถ Analytics ได้ว่ามี Percent การทำงานผ่านมากแค่ไหน
ปัญหาที่อาจพบเจอ
ทำไม เครื่อง Agent ไม่สามารถ access Gitlab ได้
Agent access Gitlab ไม่ได้
จะต้องทำการกำหนดให้ docker เชื่อมต่อไปที่ GitLab แบบ insecure สามารถทำได้ดังนี้
- remote เข้าไปยัง Linux server
- ใช้คำสั่ง
sudo nano /etc/docker/daemon.json
- ใส่เนื้อหาดังนี้
- Save and Exit โดยการ Ctrl+X และ Enter