CI/CD คืออะไร จะเอามาใช้กับงาน Developer ได้อย่างไร ?

         CI/CD เป็นลำดับขั้นตอนที่ Developer ต้องทำเป็นประจำอยู่แล้ว แต่จะมีการออกแบบให้ใช้งานได้ง่ายขึ้น เป็นขั้นเป็นตอนมากขึ้น รวมถึงอาจให้ทำงานโดยอัตโนมัติ โดยอาศัย "ผู้ช่วย" ซึ่งส่วนใหญ่จะเป็นลักษณะ Pipeline-as-a-Code ตามสไตล์ยุคของ DevOps


พูดถึง CI/CD กันก่อน

  • CI = Continuous Integration

    เป็นขั้นตอนที่มักจะอยู่ใน phase Dev จะทำค่อนข้างถี่ เพื่อให้เห็น progress report ต่าง ๆ เช่น Unit Test, Coverage, UI Test รวมถึงการเก็บ version ต่าง ๆ ไว้อาจเป็นลักษณะ nightly build, weekly build ก็ได้


  • CD = Continuous Delivery

    เป็นขั้นตอนที่พร้อมให้ Tester ทดสอบระดับนึง ก็จะมีการส่ง version ที่เก็บไว้ไป deliver บน environment ใช้งาน เช่น  SIT, UAT หรือ PROD
    * SIT = System Integrate Test, UAT = User Acceptance Test, PROD = Production


Pipeline 

         จริง ๆ แล้ว pipeline ก็คือขั้นตอนที่ developer ทำอยู่เสมอนั่นแหละ เมื่อเราจะทำเป็น CI/CD เราก็จะต้องออกแบบว่าจะทำอะไรบ้าง (Design Pipeline) โดยต้องคิดเสมือน setup project ใหม่บนเครื่องใหม่ เพราะเราจะไม่ใช้เครื่องของเราทำงานเหล่านี้แล้ว

         ตัวอย่างกระบวนการ

  • Checkout from git
  • Unit Testing
  • Test Coverage
  • UI Testing (Automated Testing)
  • Code Analysis
  • Build app
  • Keep artifact
  • VPN
  • Deploy
  • Notify deploy status

         ขั้นตอนเหล่านี้ผมก็ไม่ได้ทำเสมอ บางงานก็มีแค่การ Deploy ด้วยซ้ำ ขึ้นอยู่กับการออกแบบว่าเราอยากได้อะไรมาช่วยเราตรงไหน ซึ่งถ้าจะให้พูดตามตรง คือ ทุกขั้นตอนเรามีทางอื่นที่ทำได้อยู่แล้ว แค่เราไม่อยากทำเอง หรือเมื่อต้องทำซ้ำ ๆ มันก็จะสะดวกมากขึ้น


CI/CD Tools


Jenkins

         เครื่องมือยอดนิยม การใช้งานค่อนข้างตรงไปตรงมา ถึงแม้ว่าจะมี pipeline syntax เฉพาะของตัวเอง แต่ script อื่น ๆ เราอาจไม่ต้องทำผ่าน jenkins ทั้งหมด เราสามารถใช้วิธีที่คุ้นเคยได้ เช่น windows remote desktop ไปลงโปรแกรมไว้ก่อน เป็นต้น เหมาะสำหรับองค์กรที่มีทรัพยากรเพียงพอ โดยตัว Jenkins สามารถโหลดมาติดตั้งได้ฟรี ค่าใช้จ่ายอาจไปตกที่ physical hardware 


         การใช้งานจะ based-on Docker image ซึ่งเราอาจจะต้องรู้จัก image นั้น ๆ ก่อนนำมาใช้ ข้อดีคือถ้าเราใช้ Git Repository ของ Gitlab อยู่แล้วก็ถือว่าพร้อมใช้ Gitlab CI เลย โดยเฉพาะถ้าใช้ gitlab.com ได้ให้ shared runner มาแล้ว แต่ถ้าอยากได้ทรัพยากรเพิ่มเติมก็ต้องใช้เงินแก้ปัญหาเช่นกัน เหมาะสำหรับทีมขนาดเล็ก และโปรเจคขนาดเล็ก (ถ้าไม่อยากเสียเงินเพิ่มเติม)
         
         นอกจากนี้ก็ยังมีอีกหลายเจ้า เช่น BitBucket PipelinesBitrise แต่การเลือกใช้ควรตกลงกันภายในทีม นอกจากการใช้งานไม่เหมือนกันแล้ว pipeline syntax แต่ละเจ้าก็ไม่เหมือนกันอีกด้วย



         สุดท้ายนี้ ถ้าใครมี pipeline สวยๆ แบ่งปันให้ชมกันได้นะครับ 

Jenkins' Blueocean


Facebook Comment

Recent Posts

Popular post of 7 days

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

Portal คืออะไรกันนะ???

Port Forwarding สำหรับคนใช้ AIS Fibre

Popular

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

เรื่องของ ++i กับ i++

Port Forwarding สำหรับคนใช้ AIS Fibre

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

ทดสอบ Mobile App แบบ Automated ด้วย Appium ทำยังไงกันนะ

Deeplink, Universal Links คืออะไร ทำงานร่วมกับ Mobile App ได้ยังไง

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง