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

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

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

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

Popular

[Java] Java 8 DateTime ใหม่ ไฉไลกว่าเดิม

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

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

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

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

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

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

[Java] Java Static Variable และ Static Method

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

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