นำ Gitlab มาใช้กับ Agile ได้ยังไง?22 May 2020DevOps

นำ Gitlab มาใช้กับ Agile ได้ยังไง?

หากบริษัทไหนเริ่มนำ Agile เข้ามาใช้ในองค์กร และต้องกำลังตามหาเครื่องมือที่จะสามารถทำงานในแบบ Agile ได้อย่างดี ผมแนะนำเป็น Gitlab

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

GitLab เป็น Git repository ที่ได้รับการออกแบบให้มีความยืดหยุ่นเพียงพอที่จะปรับให้เข้ากับวิธีการทำงานแบบ Agile และก็มี 9 เหตุผลที่ทำให้ผมเลือกใช้ Gitlab เป็น Git repository และในโพสต์นี้ผมจะแสดงการจับคู่อย่างง่ายๆ ของคุณสมบัติ Agile กับ GitLab และอธิบายว่าบริษัทผมนำ Gitlab มาใช้งานกับ Agile ได้ยังไง

เปรียบเทียบคำเรียกต่างๆ ของ Agile กับ Gitlab

Agile artifactGitLab feature
User storyIssues
TaskTask lists
EpicsEpics
Points and estimationWeights
Product backlogIssue lists and prioritized labels
Sprint/iterationMilestones
Burndown chartBurndown charts
Agile boardIssue boards

คราวนี้เรามาดูกันทีละตัวว่ามันมีการใช้งานทดแทนกันแบบไหน

User stories → Issues

ใน Agile เรามักจะเขียน User story card  เพื่อเก็บข้อมูล Features ต่างๆ ก่อน ซึ่งใน Gitlab เราสามารถเขียนในรูปแบบของ Issue ได้ แล้วเราก็ติด Label ว่า user story

สร้าง issue แล้วกำหนดด้วย Label
สร้าง issue แล้วกำหนดด้วย Label

Task → GitLab task lists

บ่อยครั้งที่ User story จะถูกแยกออกเป็นแต่ละ Tasks เพิ่มเติม เราสามารถเขียน Task list ในรูปแบบ Markdown ออกมาได้ในคำอธิบายของ User story นั้นๆ

Task list ใน Gitlab
Task list ใน Gitlab

Epics → GitLab epics

ในส่วนของ Epic นั้น Gitlab ก็มีรองรับเช่นกันเพื่อสร้างช่วยในเรื่องของการจัดกลุ่ม issue ต่างๆ ได้อีก แต่ในส่วนของ Gitlab epic เราต้องเสียเงินเพิ่มเติมถึงจะใช้งานได้

ตัวอย่าง Gitlab epic
ตัวอย่าง Gitlab epic

Product backlog → GitLab issue lists and prioritized labels

โดยปกติแล้วเจ้าของผลิตภัณฑ์จะสร้าง User story card ออกมาเพื่อสะท้อนความต้องการของธุรกิจ และจะจัดลำดับความสำคัญในงานต่างๆ เพื่อบ่งบอกความเร่งด่วน และลำดับการพัฒนาที่ต้องการ

ใน GitLab จะมี Issue lists ที่เราสามารถดูเพื่อติดตามงานต่างๆ ได้ โดยสามารถกำหนด Label ให้แต่ละ Issue ได้ซึ่งช่วยให้สามารถกรองตาม Label ต่างๆ ทำให้มีความยืดหยุ่นมากขึ้น

Issue list สามารถกรอกตาม Label ได้
Issue list สามารถกรอกตาม Label ได้

Sprints → GitLab milestones

Sprint เป็นการกำหนดช่วงเวลาในการทำงานให้เสร็จ ซึ่งอาจเป็นหนึ่งสัปดาห์ หรือสองสามสัปดาห์ หรืออาจเป็นเดือนหรือมากกว่านั้น แต่ส่วนใหญ่จะกำหนดเป็นสองสัปดาห์ซึ่งบริษัทผมก็เป็นแบบนี้

ใน Gitlab จะมี Milestones ที่เราสามารถกำหนดออกมาในรูปแบบ Sprint ได้ สามารถใส่วันที่เริ่มต้น และวันที่จบได้ และนำ Issue มาใส่ในนี้ได้เพื่อให้ทราบว่า Sprint นี้จะได้อะไรออกมา

กำหนด Milestones เป็นแบบ Sprint
กำหนด Milestones เป็นแบบ Sprint

Points and estimation → GitLab issue weights

การทำ Sprint planning เป็นการวางแผนในแต่ละ sprint และจะมีการกำหนดคะแนนให้กับ issue ต่างๆ ในแบบเลขฟิโบนาชชี่ (Fibonacci numbers) คือ 0,1,2,3,5,8,13,20,40 และ 100

ซึ่ง issue ต่างๆ ของ Gitlab เราสามารถกำหนด Weight ลงไปได้เลย ทำให้เราสามารถรู้ได้ว่า issue ไหนยาก หรือง่าย

กำหนด weight ใน gitlab ได้เลย
กำหนด weight ใน gitlab ได้เลย

Agile board → GitLab Issue Boards

Agile board ส่วนใหญ่จะทำเป็นในลักษณะ Kanban board คือบอร์ดที่มีการแบ่งออกมาเป็นหลายๆ ส่วน เช่น To do, In progress และ Testing (ขึ้นอยู่กับ work flow ในแต่ละองค์กร) เพื่อเป็นการกำหนดว่า Issue ไหนใครทำ และอยู่ส่วนไหนแล้ว โดยส่วนนี้จะแสดงให้ทุกคนในทีมเห็นได้โดยง่าย เพื่อรับรู้สถานะที่เกิดขึ้นใน Project นั้นๆ แบบ Real time

ซึ่งใน Gitlab จะมี Issue board ให้อยู่แล้วเราสามารถปรับแต่ง work flow ได้ตามต้องการอย่างอิสระ

Kanban board ใน Gitlab
Kanban board ใน Gitlab

Burndown charts → GitLab Burndown Charts

ในส่วนของทีมพัฒนาต้องทราบว่าทำงานเสร็จไปแล้วเท่าไร และเหลืองานที่ต้องทำอีกเท่าไรซึ่งจะถูกแสดงออกมาในลักษณะของกราฟทำให้มองภาพรวมได้ง่ายขึ้นผ่านรูปแบบ Burndown chart

ซึ่ง GitLab ก็มี Burndown chart มาให้พร้อมแล้ว มันอยู่ใน Milestones แต่เราต้องกำหนด Weight ให้กับ Issue ด้วยเราถึงจะเห็น Burndown chart

Burndown chart ใน Gitlab
Burndown chart ใน Gitlab

CI/CD tool

การทำ Agile นั้นเราต้องส่งชิ้นงานให้ลูกค้าได้เห็นบ่อยขึ้น ได้ทดสอบบ่อยขึ้น ทำให้จำเป็นต้องทำ CI/CD ให้กับระบบเพื่อจะได้ไม่ต้องเสียเวลาทำสิ่งที่ต้องทำซ้ำๆ ในทุกๆ การ Release เช่น ต้องทดสอบทุกครั้ง, ต้อง build ทุกครั้ง, ต้องเอาขึ้น server นี้ทุกครั้ง เป็นต้น

โดยส่วนใหญ่จะทำงานเป็นในลักษณะ Pipeline ทำงานต่อกันไปเรื่อยๆ

CI/CD Pipeline
CI/CD Pipeline

ซึ่ง Gitlab ได้มี CI/CD มาให้พร้อมใช้งานเลย โดยมี Gitlab-runner เป็นตัวช่วยทำงาน Run jobs ต่างๆ ให้ทำงานตาม Pipeline ที่เรากำหนด และวิธีการเขียนก็อยู่ในรูปแบบ yaml ทำให้เราสามารถเก็บค่าพวกนี้ลงใน Git ได้ตามปกติ

มีการแสดงผลลัพธ์ของ Job นั้นๆ ว่าผ่านหรือไม่ผ่านทันที และก็จะมี Log แสดงผลให้ดูด้วยว่าทำงานอะไรไปบ้าง ทำให้เราตรวจได้ว่าคำสั่งที่ใส่ไปใช้งานได้จริงไหม

แสดงการทำงานของ Job นั้นๆ
แสดงการทำงานของ Job นั้นๆ

บทสรุป

เนื่องจากทีมผมใช้ Gitlab กันอยู่แล้ว มันเป็นเครื่องมือที่ครบเครื่องมากทำให้พอเรานำ Agile เข้ามาใช้งาน การทำงานก็เลยไม่ได้สดุดอะไรมาก เพียงแค่ปรับวิธีการให้เป็น Agile มากขึ้นเท่านั้น

ตัวผมเองได้รับประโยชน์อันนี้จากการทำงานกันจริง ผมเลยอยากแชร์ หรือช่วย Gitlab ขายของหน่อย ฮาๆ ว่าของเขาเป็นดีจริงๆ และหวังว่าคนที่หลงเข้ามาอ่านจะสามารถเข้าใจในระบบ Gitlab มากขึ้น

ซึ่งต้องยอมรับ Gitlab ได้พัฒนามาไกลมากๆ จากเป็นเพียงแค่ Git repository มาตอนนี้ได้มาเป็นสิ่งที่เรียก DevOps platform ไปแล้ว… โหดสัส

What is GitLab?

GitLab is a complete DevOps platform, delivered as a single application.

ก่อนหน้า
ถัดไป