ค้นหา
  • moonlight-academy

พื้นฐานที่ควรรู้เกี่ยวกับ CI/CD: ตอนที่ 3 อะไรคือ CI อะไรคือ CD? แล้วมันมี D อะไร

อัพเดตเมื่อ: 20 ส.ค. 2019



กลับมาอีกครั้งสำหรับซีรีย์บทความพื้นฐาน CI/CD ในตอนที่ 3 กันต่อนะครับ สำหรับท่านใดที่เพิ่งอ่านบทความนี้เป็นตอนแรก แนะนำให้ลองอ่านบทความตอนที่ 1 กับตอนที่ 2 ก่อนนะครับ

ตอนที่ 1: เรื่องมันเริ่มมาจาก 100 ปีที่แล้ว

ตอนที่ 2: จาก Assembly Line สู่ DevOps


จากที่เราได้เกริ่นนำถึงแนวคิดและที่มาตั้งแต่การ Assembly Line ของฟอร์ด ไปจนถึงกระบวนการพัฒนาซอฟท์แวร์ที่ประสบปัญหาอะไรบ้าง เพื่อไม่ให้เสียเวลาเรามาทำความรู้จักกับ CI/CD กันเลยนะครับ


CI นั้นย่อมาจาก Continuous Integration เป็นกระบวนการที่ทำให้การพัฒนาซอฟท์แวร์ในแต่ละขั้นตอนมีความเชื่อมต่อกัน เริ่มตั้งแต่มีการเปลี่ยนแปลงใน source code ไปจนถึงการ build และ test อย่างอัตโนมัติ โดยเราสามารถกำหนด script ได้ว่าในแต่ละขั้นตอนนั้นจะประกอบไปได้กระบวนการอะไรบ้าง 1 2 3 4


ในส่วนของ CD นั้นจะประกอบไปด้วย 2 ส่วนด้วยกันดังนี้

ส่วนแรกจะย่อมาจาก Continuous Delivery โดยจะเริ่มทำงานทันทีที่มีการเปลี่ยนแปลงในตัว source code ไล่ไปจนถึงการ build และการ test จน release ออกมาเป็น version ใหม่พร้อมใช้งาน แต่ก็ยังไม่ปล่อยออกไปให้กับลูกค้าได้ใช้งานจริงในทันที โดยจะยังคงเหลือกระบวนการ deploy ให้เป็นแบบ manual เอาไว้เพื่อรอการอนุมัติจากทีมบริหารเสียก่อน ถ้าเปรียบเสมือนกับเราจัดเตรียมงานอีเว้นท์ไว้พร้อมแล้วทุกอย่างแล้ว รอแค่อย่างเดียวคือให้ประธานมาตัดริบบิ้นอ่ะครับ


ในส่วนสองของ CD นั่นก็คือ Continuous Deployment จะเหมือนกับ Continuous Delivery ทุกอย่างยกเว้นแต่กระบวนการ deploy ที่คราวนี้จะเป็นไปอย่างอัตโนมัติโดยไม่ต้องรอ approve จากฝ่ายใดเลย ซึ่งเราก็สามารถกำหนดได้ว่า branch ไหนบ้างที่จะสามารถ deploy ขึ้นสู่ environment ใด โดยเราจะเลือกวิธีการแบบ C.Deliver หรือ C.Deployment ก็ขึ้นอยู่กับนโยบายของแต่ละบริษัทนะครับ


ความแตกต่างของ CI/CD ในแต่ละขั้นตอน

การที่เรานำแต่ละขั้นตอนในการพัฒนามาเชื่อมต่อกัน ต่อไปนี้เราจะเรียกมันว่า pipeline โดยในแต่ละ pipeline ก็จะสามารถแยกย่อยออกมาได้ 4 เฟสดังต่อไปนี้ครับ

  1. Commit: จะเป็นขั้นตอนที่เมื่อนักพัฒนาได้ทำการ coding เสร็จแล้วและทำการ commit หรือ push ตัว source code ขึ้นสู่ repository

  2. Build: เป็นขั้นตอนในการแปลง source code ของเราออกมาให้อยู่ในรูปของภาษาเครื่องหรือแพ็คเกจที่พร้อมสำหรับใช้งาน

  3. Test: คือการทดสอบผลลัพธ์ที่ได้จากขั้นตอนการ build เพื่อหาข้อบกพร่องก่อนที่จะมีการส่งมอบไปให้กับลูกค้า เป็นเฟสที่สำคัญอย่างยิ่งที่ควรมีในแต่ละ pipeline ของเราครับ

  4. Deploy: เป็นการส่งมอบแอพพลิเคชั่นรุ่นล่าสุดที่เกิดจากการ build ให้กับลูกค้า ซึ่งถ้าหากต้องการให้กระบวนการไม่มีในบาง pipeline ก็สามารถกำหนดได้ในเครื่องมือที่เราใช้ทำ CI/CD ครับ

อย่างไรก็ตามการนำ CI/CD มาประยุกต์ใช้งานจะเกิดประโยชน์สูงสุดหากเราสามารถทำให้การทดสอบโปรแกรมเป็นไปได้อย่างอัตโนมัติตั้งแต่ system test, unit test ไปจนถึง integration test หรือการ test ในรูปแบบอื่นๆ ก็ตามที


โดยข้อดีที่เราจะได้หากเรานำคอนเซ็ปท์ CI/CD มาปรับใช้ในงานของเราก็จะสามารถสรุปได้เป็นข้อๆ ดังนี้ครับ

  1. ลดระยะเวลาในการพัฒนา เนื่องจากการพัฒนาซอฟท์แวร์มีการดำเนินไปอย่างต่อเนื่อง เป็นไปอย่างอัตโนมัติและทราบผลลัพธ์ได้ทันที ทำให้เราสามารถส่งมอบแอพฯ รุ่นใหม่ให้กับลูกค้าได้ไวขึ้นครับ

  2. ลดต้นทุนในการพัฒนา ค่าใช้จ่ายหลักในการพัฒนาซอฟท์แวร์ก็คือค่าแรงของคน เพราะฉะนั้นยิ่งเราสามารถลดระยะเวลาของการพัฒนาในแต่ละรอบลงไปได้ ก็ส่งผลให้ค่าใช้จ่ายในแต่ละรอบลดลงไปด้วย

  3. ทนต่อการเปลี่ยนแปลงได้ง่าย เนื่องจากในการพัฒนาซอฟท์แวร์นั้นมีหลายขั้นตอนที่แยกจากกัน เวลาจะแก้บั๊กหรือเพิ่มฟีเจอร์ใหม่ๆ เข้ามาจึงใช้เวลาค่อนข้างนาน จะสังเกตได้ว่าโปรแกรมหรือเกมสมัยก่อน จะมีช่วงระยะเวลาในการอัพเดทที่ทิ้งช่วงนาน บางโปรแกรมใช้เวลาเป็นปีกว่าจะอัพเดทเพียงแค่ครั้งหรือ 2 ครั้งเท่านั้นเอง ทำให้เวลาเจอบั๊กใหม่ๆ ที่มีความเสี่ยงต่อระบบก็ต้องรอเป็นเวลานาน กว่าจะเข้าไปแก้ไขช่องโหว่นั้นได้ แต่พอมี CI/CD เข้าไปจับการทำงานก็จะไวขึ้น จะสังเกตได้ว่าในปัจจุบันหลายๆ โปรแกรมจะมีการอัพเดทที่ถี่ขึ้น บางเจ้าอัพเดทรายวันก็ยังมี

  4. ลดการเปลี่ยนแปลงในแต่ละรุ่นลง สืบเนื่องจากข้อบนสมัยก่อนกว่าจะอัพเดทโปรแกรมได้ก็ต้องใช้เวลาค่อนข้างนานและมัดรวมเอาหลายๆ change หรือการแก้ไขหลายอย่างไว้ด้วยกันแล้วปล่อยออกมาทีเดียว แต่พอสามารถพัฒนาได้ไวขึ้น ส่งมอบได่เร็วขึ้น โค้ดในแต่ละรอบของการพัฒนาก็จะมีการเปลี่ยนแปลงน้อยลงไปด้วย

  5. ดูแลรักษาได้ง่ายขึ้น จากข้อสรุปทั้งหมดที่ผ่านมาทั้ง ค่าใช้จ่ายในการพัฒนาที่ลดลง ความเร็วในการพัฒนาที่เพิ่มขึ้น การเปลี่ยนแปลงในแต่ละรุ่นลดลง และแต่ละกระบวนการลื่นไหลเป็นไปอย่างอัตโนมัติ จึงส่งผลให้การดูแลรักษา (maintenance) นั้นทำได้ง่ายขึ้นด้วยครับ

ตัวอย่างที่เห็นได้ชัดของการที่เราสามารถส่งมอบแอพฯ version ใหม่ๆ ให้กับลูกค้าได้อย่างรวดเร็ว


เอาล่ะครับสำหรับเนื้อหาในวันนี้ก็จบลงแล้วนะครับ ในตอนต่อไปเราก็จะได้มาลองทำระบบ CI/CD กันดูเพื่อให้รู้ว่าเราจะสามารถนำเอาไปประยุกต์ใช้ได้อย่างไร โดยเครื่องมือที่เราจะใช้ก็จะเป็นสิ่งที่ผมใช้ในบริษัทของผมเองอยู่แล้วนั้นก็คือตัว GitLab ซึ่งถือว่าเป็นเครื่องมือที่ครบเครื่องมาก มีตั้งแต่เครื่องมือที่ใช้ในการบริหารโปรเจ็ค, source code management, Kanban Board ไปจนถึงตัว CI/CD ท่านใดสนใจก็อย่าลืมติดตามกันได้นะครับ สำหรับวันนี้ผมขอตัวลาไปก่อน


สวัสดีครับ


ขออนุญาตประชาสัมพันธ์นะครับ หลักสูตร CI/CD with GitLab รุ่นที่ 1 เปิดให้ลงทะเบียนได้แล้ววันนี้ เรามาเรียนรู้กันครับว่าเราจะสามารถปรับปรุงกระบวนการพัฒนาซอฟท์แวร์ให้ไวขึ้นได้อย่างไร ทั้งยังช่วยลดค่าใช้จ่ายแต่ไม่ทำให้คุณภาพนั้นลดลง ด้วยเครื่องมือที่เรียบง่ายและทรงพลังอย่าง GitLab ที่ทำให้กระบวนการพัฒนาตั้งแต่การจัดการ source code การทดสอบ การตรวจสอบคุณภาพไปจนถึงการปล่อยให้ลูกค้าใช้งานนั้นให้ไหลลื่นได้อย่างอัตโนมัติ เปิดให้ลงทะเบียนได้แล้ววันนี้ครับ


พิเศษชำระเงินภายในวันที่ 7 ก.ย. 62 รับส่วนลด Early Bird ทันที 2,500 บาท จากราคาปกติ 14,000 บาทเหลือเพียง 11,500 บาทเท่านั้น สนใจสำรองที่นั่งได้ที่ http://bit.ly/cicd-gitlab-01

รายละเอียดเนื้อหา >>> click



ดู 0 ครั้ง

© 2018 Moonlight Academy.