ทำความรู้จักกับ CI/CD services บน Google Cloud


ทำความรู้จักกับ CI/CD services บน Google Cloud

ในปัจจุบันการสร้าง Application และ Software ได้มีการพัฒนาไปอย่างมากในเชิงของ Technology ซึ่งมี Tools หลากหลาย มาช่วยในการพัฒนา Software ของเรา ในขั้นตอนต่าง ๆ เช่น Design, Implement, Testing และ Deployment

เพื่อให้ตอบโจทย์กับการแข่งขันในตลาดปัจจุบัน การพัฒนา Software ของเราควรมีประสิทธิภาพทั้งในแง่ของความเร็วและความคล่องตัว เพื่อตอบโจทย์ทางด้านธุรกิจและสามารถแก้ไขปัญหาของผู้ใช้งานได้

1. CI / CD คืออะไร ?

2. CI/CD Services บน Google Cloud

3. CI/CD Pipeline บน Google Cloud

1. CI/CD คืออะไร ?

CI/CD คือ กระบวนการหนึ่งที่จะมาช่วยในพัฒนา Software ให้มีประสิทธิภาพมากขึ้น ทั้งในแง่ของระยะเวลาการพัฒนาและคุณภาพของ Software 

CI ย่อมาจาก Continuous Integration คือ กระบวนการที่จัดการ Source Code ของเราให้ผ่านกระบวนการการ Testing, Building เพื่อให้แน่ใจว่า Source Code สามารถใช้งานได้จริง ไม่มีข้อผิดพลาด

โดยผลลัพธ์จากขั้นตอน CI คือ Source Code ของเรามีความพร้อมที่จะถูกใช้งานและส่งมอบให้กับลูกค้า

CD ย่อมาจาก Continuous Delivery หรือ Continuous Deployment กระบวนการที่ช่วยเหลือให้เราสามารถ Deploy Software ของเราได้อย่างมีประสิทธิภาพ โดยการนำ Source Code ที่ผ่านการ Build และ Testing มาแล้ว ซึ่งอาจอยู่ในรูปแบบที่แตกต่างกัน เช่น JAR file, Static file หรือแม้กระทั่ง Container Image ให้จัดการ Deploy ขึ้นไปอยู่บน Server ตามที่เราต้องการและสามารถใช้งานได้อย่างถูกต้อง

กระบวนการ CD มี 2 ประเภท

  1. Continuous Delivery คือ การส่งมอบ Software ที่ใช้วิธีการ manual ในการ Deploy หลังจากผ่านขั้นตอน CI มาเรียบร้อยแล้ว โดยจะต้องมีการอนุมัติจากผู้รับรอง ซึ่งในที่นี้อาจหมายถึง Manager เพื่อทำการตรวจสอบก่อน Deploy ขึ้นสู่ Server
  2. Continuous Deployment คือ การส่งมอบ Software ในรูปแบบ Automate หลังจากผ่านขั้นตอน CI มาเรียบร้อยแล้ว จะทำการ Deploy ขึ้นสู่ Server ทันที ไม่ต้องรอการอนุมัติใด ๆ

อ้างอิง :https://clm-consulting.com/ser...

ท้ายสุดแล้วกระบวนการ CD คือ เราสามารถส่งมอบ Software ให้กับลูกค้าได้ ในขณะเดียวกันมีระบบที่คอยช่วยเหลือจัดการทั้ง Revision ของ Source Code และระบบ Operation และ Monitoring

2. CI/CD Services บน Google Cloud

เพื่อให้การพัฒนา Software มีประสิทธิภาพยิ่งขึ้น ไม่เพียงแต่เราจะมีการทำ CI/CD pipeline เท่านั้น การนำ Software ไป Deploy ขึ้น Cloud ถือเป็นตัวช่วยหนึ่งที่ทำให้ Software ของเรามีความคล่องตัวและความปลอดภัยมากขึ้น สามารถใช้ tools หรือ services อื่น ๆ บน cloud มา integration กับ software เราได้ รวมถึงค่าใช้จ่ายค่าบริการที่สามารถตรวจสอบได้ และสามารถเลือกแผนการชำระค่าบริการในรูปแบบต่าง ๆ ให้ตรงกับแผนและขนาดของธุรกิจของเราได้

โดย Google Cloud มี services ที่ค่อนหลากหลายและครอบคลุมในหลาย ๆ ด้าน เช่น Compute Instance, Data Analytics, AI/Machine Learning, Storage และอื่น ๆ อีกมากมาย ที่สามารถใช้ร่วมกันได้อย่างไร้รอยต่อ

อ่านเพิ่มเติม Google Cloud คืออะไร

1) Cloud Build

Cloud Build คือ service ที่เป็น Serverless CI/CD Platform สามารถจัดการ Testing, Building และ Deploying ได้ในตัวเอง ด้วยความที่เป็น Serverless ทำให้เราไม่ต้องกังวลหรือคำนึงถึงการจัดการตัว Server, Infrastucture, auto-scalling ของระบบ CI/CD เลยสักนิด เพราะทาง Google Cloud ดูแลจัดการให้แล้ว

โดยเราสามารถเขียน YAML script เพื่อจัดการขั้นตอนการทำ CI/CD ว่าในแต่ละขั้นตอนจะให้ execute กระบวนการใดบ้าง

2) Container Registry

Container Registry คือ services ที่ให้บริการที่จัดเก็บและจัดการ Container Image มีลักษณะคล้ายคลึงกับ Docker Hub โดยสามารถจัดเก็บได้ตาม Tag หรือ Versioning ของ Container Image และสามารถจัดเรื่อง privacy ของ Container Image ได้ ว่าต้องการให้เป็น Private หรือ Public เพื่อจัดการความปลอดภัย สามารถจัดการ Authorized ว่าอนุญาตให้ใครสามารถเข้าถึง Container Image นั้น ๆ ได้ มากกว่านั้นคือ ความสะดวกของการใช้งานโดยเฉพาะหากใช้งานกับ Google Cloud Platform เราสามารถ Deploy Container Image ผ่านได้จาก Container Registry UI

3) Cloud Source Repositories

Cloud Source Repositories คือ services ที่ให้บริการ Private Git หรือที่จัดเก็บ Source Code บน Google Cloud Platform ลักษณะคล้าย Public Repositories ทั่วไป แต่มีความสามารถในการ Search หา Source code รองรับความซับซ้อนของการค้นหา มากกว่านั้นคือการนำ Source Code ไป Deploy โดยตรงได้เลย รวมถึงการทำ Integration กับ Google Cloud Services อื่น ๆ ได้อย่างดี เช่น Cloud Build, App Engine, Pub/Sub หรือกรณี services ในการดูแล Monitoring เช่น Cloud Monitoring, Cloud Logging เป็นต้น

3. CI/CD Pipeline บน Google Cloud

หลังจากที่เราได้รู้จัก CI/CD Services บน Google Cloud Platform มาแล้ว หากต้องการเริ่มต้นสร้าง CI/CD Pipeline บน Google Cloud Platform ต้องวางแผนอย่างไรบ้าง ?

1. เชื่อมต่อ Git Repositories กับ Cloud Build

Cloud Build รองรับการทำ Integration กับ Git Repositories ดังต่อไปนี้

  1. Cloud Source Repositories
  2. GitHub
  3. BitBucket

ซึ่งเราสามารถตั้งค่ากำหนด Cloud Build ว่าจะรับ Trigger Event ประเภทใดได้บ้าง เช่น ทุก commit จาก Main Branch, New Pull Request, New Tag เป็นต้น

เริ่มต้นการเชื่อมต่อกับ GitHub และ Cloud Build

ให้ไปที่ marketplace และค้นหา Google Cloud Build จากนั้นทำการติดตั้งกับ Repository

Grant Authorize สิทธิ์ของ GitHub และ Google Cloud ให้เชื่อมต่อกัน

เมื่อทำการเชื่อมต่อ GitHub และ Google Cloud เสร็จเรียบร้อยแล้ว ให้กลับไปที่หน้า Google Cloud Console และไปที่ Cloud Build จากนั้นเลือกเมนู Trigger เพื่อ setup ตัว Trigger กับ Repository

โดยจากรูปภาพด้านบนเป็นการตั้งค่า Trigger ว่าหากมี commit ใด ๆ เข้ามาที่ main branch ตัว trigger จะทำการ run pipeline ทันที

ถ้าหากเลื่อนลงมาด้านล่างจะเห็นว่า จะมีการ config เพิ่มเติมคือ Build Configuration โดยในส่วนนี้คือการกำหนดชื่อและเลือกที่อยู่ของ CI/CD script ใน Repositories ซึ่งจะเป็นตัวสร้างคำสั่งให้ Cloud Build ว่าต้องทำอะไรบ้าง ตามขั้นตอนเป็นลำดับขั้น

อีกส่วนคือ Subsitution Variables คือการกำหนดค่าตัวแปร Enviroment Variable ให้ Cl/CD ของ Cloud Build สามารถนำไปใช้ได้

2. กำหนดขั้นตอนการทำ CI/CD ผ่าน YAML Script

โดยเราสามารถกำหนดขั้นตอนต่าง ๆ ว่าจะให้ Cloud Build ทำอะไรบ้าง ตามตัวอย่างภาพด้านล่างนี้

ในตัว YAML script จะคอยบอกว่า Cloud Build ต้องทำอะไรบ้างและทำขั้นตอนใดก่อน ใน Pipeline ซึ่งในแต่ละส่วนการทำงานสามารถกำหนดได้ตามความต้องการของโปรเจค เช่น Testing, Deploy, Build เป็นต้น หากเราต้องการ Build Image ใน CI/CD Pipeline ก็ต้องมี Dockerfile เพื่อกำหนดขั้นตอนการ Build Image เช่นกัน

ในกรณีที่ขั้นตอนใดเกิดข้อผิดพลาดก็จะเกิด alert error แจ้งเตือนขึ้นมา

ขั้นตอนการ Testing

ในขั้นตอนนี้จะทำการ Run test เพื่อทดสอบ code ของว่าสามารถทำงานได้ถูกต้องหรือไม่ ซึ่งรูปแบบการ Test นั้นมีหลากหลายระดับ เช่น Unit Test, Integration Test, UI Test เป็นต้น

ขั้นตอนการ Building

ในขั้นตอนนี้เริ่มจะทำการ Build Image ซึ่งจะอ้างอิงขั้นตอนการ Build จาก Dockerfile หลังจากทำการ Build Image เสร็จเรียบร้อยแล้ว ในอีกขั้นตอนถัดไป คือการ Push Image ที่เราได้ทำการ Build ไปที่ Container Registry

โดยที่เราสามารถเรียกใช้ Environment Variable ได้ตามภาพ เช่น

$PROJECT_ID คือ ชื่อ project id

$REPO_NAME คือ ชื่อ repository

$SHORT_SHA คือ commit id แบบสั้น

$BRANCH_NAME คือ branch name


ขั้นตอนการ Deployment

ในขั้นตอนนี้จะทำการ Deploy Image ที่ได้ build เมื่อขั้นตอนที่แล้ว โดยเราสามารถกำหนดได้ว่าจะให้ไป Deploy ที่ compute service ชนิดใด ตามภาพจะเป็นการ Deploy ไปที่ Cloud Run และกำหนด parameter ต่าง ๆ เช่น service name, image name, region, platform เป็นต้น

ในช่วงที่ Run Pipeline เราสามารถดูรายละเอียดได้ว่า Cloud Build ทำขั้นตอนใดอยู่ ใช้เวลาไปเท่านั้น หากเกิด error ก็สามารถมาตรวจสอบได้ว่าเกิดจากอะไรและขั้นตอนไหนใน Pipeline

3. แล้วควรจะ Deploy ไปที่ไหนดี ?

บน Google Cloud Platform มี Compute Services หลากหลายรูปแบบ ซึ่งมีความแตกต่างกันในลักษณะของการใช้งานและตามความต้องการของผู้ใช้งาน

  • หากมีความคุ้นเคยกับ Virtual Machine ทั่วไปก็สามารถเลือก Compute Engine เป็น Server ได้
  • หากมีความคุ้นเคยกับ Container Based มาบ้างแล้ว สามารถเลือกใช้ Cloud Run เพื่อความสะดวกในการทำ Deploy งานของเราได้
  • หากมีความคุ้นเคยกับ Kubernetes Cluster มาบ้างแล้ว สามารถเลือกใช้ Google Kubernetes Engine มาเป็น Cluster ที่จะใช้ Deploy ได้
  • หากไม่มีความคุ้นเคยกับการ Deploy Source Code ก็ยังสามารถใช้งาน Google Cloud ได้ รวมถึง CI/CD โดยจะมี Services ลักษณะที่เป็น PaaS (Platform as a Service) และ FaaS (Functions as a Services) ซึ่งเราไม่จำเป็นต้องจัดการเรื่อง Deployment เพียงแค่เลือก Runtime Language ให้ตรงกับภาษาที่เราใช้พัฒนา Software ของเรา เพียงเท่านี้ก็จะสามารถ Release Software ของเราได้แล้ว

สรุป CI/CD Pipeline บน Google Cloud

การทำ CI/CD Pipeline บน Google Cloud Platform สามารถมาเพิ่มความเร็วและประสิทธิภาพในการพัฒนา Software ของเราแล้ว แถมยังช่วยให้เราสามารถจัดการ ค่าใช้จ่ายบริการได้อย่างถูกต้องเป็นระบบและมีความยืดหยุ่นต่อธุรกิจ หากต้องการลดหรือเพิ่ม Scaling Resource Server ทำได้ทันที มีความยืดหยุ่นกว่า On-premise ที่มีข้อจำกัดมากกว่า

ทั้งนี้ตัวอย่าง CI/CD ด้านบนเป็นเพียงหนึ่งในตัวอย่างเท่านั้น เราสามารถทำ CI/CD ในลักษณะต่าง ๆ ที่เข้ากับแผนปฎิบัติงานของเรา เช่น DevOps, GitOps, MLOps ได้

นอกจากนั้นการที่เราใช้งาน Google Cloud Platform ทำให้เราสามารถ Integration กับ services อื่น ๆ อย่าง Seamless ได้ เช่น Firebase, Google Maps API, AutoML, Vision API, BigQuery, Cloud Storage, Data Studio และอื่น ๆ อีกมากมาย เพื่อเพิ่มศักยภาพในการพัฒนา Product ของเรา

Written by Peem Srinikorn
Cloud Ace Thailand


Make It Now!

หากคุณต้องการคำปรึกษา Cloud Ace Thailand พร้อมให้บริการที่จะสนับสนุนคุณตั้งแต่ การให้คำปรึกษา จนถึงการออกแบบระบบ ติดตั้งระบบ ย้ายระบบ ในฐานะ Google Cloud Partner ที่มีความเชี่ยวชาญ และได้รับรางวัล Service partner of the year ในปี 2019

ติดต่อเรา th_sales@cloud-ace.com

.