ข้ามไปที่เนื้อหา

Create Azure Pipeline

ในขั้นตอนนี้กระบวนการทั้งหมดจะเกิดขึ้นภายในระบบ tfs-git.psu.ac.th หรือ Azure Devops

Pipeline เปรียบเสมือนสายพานเครื่องจักร Task เป็น Job ที่ Agent จะต้องทำตามลำดับที่ได้ตั้งไว้ การใช้งาน Pipeline นี้จะใช้สำหรับการทำ Automated test หรือการ Build Image เพื่อนำไปใช้กับการทำ Pull request เช่น

Pipeline

Continuous Integration and Continuous Deployment pipeline example https://opensource.com/article/19/7/cicd-pipeline-rule-them-all

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 มีขั้นตอนดังนี้

  1. เลือกเมนู pipelines และกด Create Pipeline
  2. ขั้นตอน "Where is your code?" เลือก Other git
  3. ขั้นตอนการ Select source เลือก Azure Repos Git
  4. เลือก Git Repository ที่ใช้และเลือก Branch ที่ต้องการจะ Publish
  5. ขั้นตอน "Choose a template" เลือก Docker container และกด Apply

Create Pipeline

การสร้าง Pipeline (Docker template)

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 มีขั้นตอนดังนี้

  1. ตั้งชื่อ Pipeline
  2. ตั้งค่า Agent pool เป็น agent ที่ได้สร้างไว้ ถ้ามองไม่เห็นสามารถกด refresh ด้านขวาได้
  3. ลบ task Push an image โดยการคลิกที่ Task และแทบตั้งค่าด้านขวาจะมีปุ่มลบ Remove

Naming Pipeline

Pipeline configuration Naming and Agent pool

Task 1: Login

เพื่อป้องกันปัญหา agent ไม่สามารถ access GitLab ได้ให้เปลี่ยนหรือสร้าง task docker ปรับ Task version เป็น 2.* และกำหนด container registry ที่ได้สร้างไว้ เปลี่ยน command เป็น login

Login Task

Pipeline configuration task login

Task 2 : Build application

  1. กด + ที่ "Agent job 1"
  2. ค้นหาในช่อง search ว่า "docker compose"
  3. กด Add ใน Task ที่ชื่อ Docker compose
  4. ตั้งชื่อว่า "Build Application"
  5. เลือก Container Registry Type เป็น container registry และเลือก container registry ที่สร้าง
  6. เลือกไฟล์ docker-compose.yml ภายใน Project หรือ Solution
  7. ถ้ามีไฟล์ override docker-compose.override.yml หรือไฟล์ที่ override ด้วยชื่อ environment ให้ใส่ชื่อไฟล์ที่ Additional Docker Compose Files เช่น docker-compose.Staging.yml
  8. หากต้องการกำหนดตัวแปร environment สรมารถเพิ่มได้ที่ Environment Variables
  9. เลือก Action เป็น Build service images
  10. Additional Image Tags ให้กำหนดว่า $(Build.SourceBranchName)_$(Build.BuildNumber)
  11. เลือก Include Latest Tag

Naming Pipeline

Pipeline configuration task: build

Task 3: Push Images

การตั้งค่าจะเหมือนกับการตั้งค่าใน Task ที่ 2 แต่จะมีการเปลี่ยน Action เป็น Push service images แทน

  1. กด + ที่ "Agent job 1"
  2. ค้นหาในช่อง search ว่า "docker compose"
  3. กด Add ใน Task ที่ชื่อ Docker compose
  4. ตั้งชื่อว่า "Push Images"
  5. เลือก Container Registry Type เป็น container registry และเลือก container registry ที่สร้าง
  6. เลือกไฟล์ docker-compose.yml ภายใน Project หรือ Solution
  7. ถ้ามีไฟล์ override docker-compose.override.yml หรือไฟล์ที่ override ด้วยชื่อ environment ให้ใส่ชื่อไฟล์ที่ Additional Docker Compose Files เช่น docker-compose.Staging.yml
  8. หากต้องการกำหนดตัวแปร environment สรมารถเพิ่มได้ที่ Environment Variables
  9. เลือก Action เป็น Push service images
  10. Additional Image Tags ให้กำหนดว่า $(Build.SourceBranchName)_$(Build.BuildNumber)
  11. เลือก Include Latest Tag

Naming Pipeline

Pipeline configuration task push images

(optional) Automated CI Trigger pipeline setting

ขั้นตอนนี้สามารถข้ามได้ถ้าไม่ต้องการให้ Pipeline ทำงานทุกครั้งที่ source code ใน branch ที่กำหนดมีความเปลี่ยนแปลง การตั้งค่า Triggers สามารถทำได้ดังนี้

  1. เลือก Tab ชื่อ Triggers
  2. เลือก Enable continuous integration
  3. ตั้งค่า Branch filters โดยให้เลือกว่า Branch ใดบ้างที่ต้องการให้ Pipeline ทำงาน เช่น กำหนดให้ Type: Include และ Branch specification: develop จะเป็นการกำหนดให้ Pipeline ทำงานทุกครั้งที่มี source code ที่ branch develop มีการเปลี่ยนแปลง

CI setup

Pipeline automatically trigger for continuous integration

Save

บันทึกการสร้าง Pipeline โดยการกดปุ่ม Save ถัดจาก Tab History เป็นอันจบสำหรับการสร้าง Pipeline หลังจากบันทึกแล้วจะมองเห็น Pipeline ที่เมนู Pipelines แถบซ้ายมือ

สามารถกดเข้าไปเพื่อดูรายละเอียดของ Pipeline ได้ว่ามีประวัติการทำงานวันไหน สถานะเป็นอย่างไร รันโดยใช้ source code จาก branch ไหนและสามารถ Analytics ได้ว่ามี Percent การทำงานผ่านมากแค่ไหน

Finishing pipeline

Save pipeline creation

ปัญหาที่อาจพบเจอ

ทำไม เครื่อง Agent ไม่สามารถ access Gitlab ได้

Agent access Gitlab ไม่ได้

จะต้องทำการกำหนดให้ docker เชื่อมต่อไปที่ GitLab แบบ insecure สามารถทำได้ดังนี้

  1. remote เข้าไปยัง Linux server
  2. ใช้คำสั่ง sudo nano /etc/docker/daemon.json
  3. ใส่เนื้อหาดังนี้
    daemon.json
    {
      "insecure-registries" : [ "registry.in.psu.ac.th:443" ]
    }
    
  4. Save and Exit โดยการ Ctrl+X และ Enter