© 2018 Moonlight Academy.

ค้นหา
  • moonlight-academy

พื้นฐานที่ควรรู้เกี่ยวกับ CI/CD: ตอนที่ 4 - การประยุกต์ใช้ CI/CD ในการพัฒนาซอฟท์แวร์



และแล้วก็มาถึงตอนที่ 4 ของบทความซีรีย์ "พื้นฐานความรู้เกี่ยวกับ CI/CD" กันแล้วนะครับ หลังจากที่ปูพื้นฐานกันมาตั้งแต่ต้นในวันนี้นั้นเราจะได้ลงมือทำกันแล้วครับ สำหรับท่านใดที่เพิ่งเข้ามาอ่านบทความนี้เป็นครั้งแรก แนะนำว่าให้ลองบทความตั้งแต่ตอนที่ 1 ถึง 3 เพื่อเข้าใจภาพรวมทั้งหมดครับ

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

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

ตอนที่ 3: อะไรคือ CI อะไรคือ CD? แล้วมันมี D อะไร


เครื่องไม้เครื่องมือที่เราจะเอามาลองสร้าง CI/CD pipeline กันในวันนี้ก็จะเป็นเครื่องมือที่ผมใช้ในบริษัทของผมอยู่แล้วนั่นก็คือ GitLab ซึ่งเป็นเว็บฝาก source code ที่คล้ายคลึงกับ Github แต่จะมีความครบเครื่องมากกว่าและที่สำคัญใช้งานได้ฟรี และตัวแอพพลิเคชั่นที่เราจะเอามาลองเล่นนั้นก็จะเป็น Spring Boot ครับ ซึ่งเป็น Java Web Framework ที่ได้รับความนิยมมากที่สุดในปัจจุบันซึ่งหลายๆ ท่านก็น่าจะคุ้นเคยกันเป็นอย่างดี ดังนั่นเครื่องมือที่เราจะใช้กันในวันนี้ก็จะดังต่อไปนี้ครับ

  1. บัญชี GitLab

  2. บัญชี Heroku Platform-as-a-Service เจ้าดังที่มีมานานและใช้งานง่ายมากๆ รองรับได้หลายภาษา เพียงแค่ส่งไฟล์ source code ขึ้นไประบบก็จะทำการรันให้อัตโนมัติ

  3. Git เครื่องมือควบคุม source code ที่ได้รับความนิยมสูงที่สุดในปัจจุบัน น้องๆ คนไหนยังไม่เคยใช้ผมขอแนะนำเลยนะครับว่า ต้องศึกษา ตัวนี้เอาไว้ด้วย เพราะใช้กันเกือบทุกบริษัทครับ

Note: เพื่อไม่ให้บทความนี้ยาวมากจนเกินไปผมจะขอไม่ลงรายละเอียดในส่วนของการสมัครบัญชีการใช้งานของทั้ง GitLab และ Heroku และขอติ๊ต่างว่าทุกท่านน่าจะพอใช้ git กันได้และได้ติดตั้งโปรแกรม Git ไว้ในเครื่องกันอยู่แล้วนะครับ


เอาล่ะครับ งั้นเรามาเริ่มต้นกันเลย


สร้างแอพใหม่ใน Heroku


1. ไปที่ https://dashboard.heroku.com/apps



2. กำหนดชื่อแอพฯ ของเราแล้วคัดลอกชื่อนั้นเก็บเอาไว้



3. ตรวจสอบแอพที่เราเพิ่งสร้างขึ้นมา



4. ทำการคัดลอง API Key เพื่อใช้กำหนดค่าใน GitLab CI



ทำการ fork โปรเจ็คจาก GitLab


5. หลังจาก Log In ใน GitLab แล้วให้ไปที่ https://gitlab.com/moonlight-academy/simple-gitlab-cicd-java-heroku


6. ทำการ Fork โปรเจ็คมาเป็นของเราเอง


7. กำหนด Group หรือ namespace ที่เราต้องการให้โปรเจ็คใหม่ของเราไปอยู่



8. จากหน้าโปรเจ็คของเราไปที่เมนู Settings > CI/CD เพื่อตั้งค่า



9. กำหนดค่าตัวแปรที่จะใช้ใน CI/CD pipeline ของเราดังนี้ - HEROKU_APP : ให้กำหนดค่าตามชื่อแอพฯ ใน Heroku ของเรา - HEROKU_API_KEY : ให้กำหนดค่าตามค่า API Key ที่ได้คัดลอกเอาไว้ในข้อที่ 4


10. ทำการ Clone หรือ Download source code มาไว้ในเครื่องของเรา


11. ทำการเปิด Terminal หรือ Command Line ในเครื่องเราแล้วทำการป้อนคำสั่งดั่งนี้



ทำการแก้ไขไฟล์เพื่อเริ่มกระบวนการ CI/CD


12. เปิดไฟล์ Main.java ใน src/main/java/com/example/ แล้วทำการแก้ไขที่บรรทัดที่ 41 เปลี่ยนค่าในตัวแปร VERSION จาก "v1.0.1" เป็น "v1.0.2"


13. ทำการ commit และ push ไฟล์ขึ้นสู่ GitLab



14. ตรวจสอบการทำงานของ CI/CD pipeline โดยการเข้าไปดูในหน้าโปรเจ็คของเราใน GitLab


โดยสถานะของเรานั้นมักจะเริ่มต้นด้วยสถานะ pending คือกำลังรอคิวเพื่อที่จะรัน CI/CD pipeline ของเราซึ่ง GitLab จะมี shared runner ให้ทุกท่านสามารถใช้งานได้ฟรีเดือนละ 2,000 นาที ซึ่งเราเองก็สามารถที่จะสร้าง GitLab runner ของตัวเราเองได้ด้วย เมื่อได้คิวแล้วก็จะเปลี่ยนสถานะเป็น running สีฟ้าอ่อนครับ ซึ่งตรงจุดนี้เราก็สามารถเข้าไปดูรายละเอียดใน pipeline ของเราได้โดยกดเข้าไปที่ icon สถานะครับ


เราสามารถเข้าไปดู job ของแต่ละ pipeline ได้โดยคลิกเข้าไปดูใน pipeline ครับ



การทำงานของแต่ละ job จะมีความแตกต่างกันขึ้นอยู่กับที่เรากำหนดไว้

เมื่อทุก job ขึ้นเครื่องหมาย success สีเขียวนั้นหมายความว่า pipeline ของเราผ่านเรียบร้อย

หลังจากที่ pipeline ของเราเสร็จทุก job แล้วก็กลับมาดูที่เว็บของเราก็จะพบว่าสามารถใช้งานได้แล้ว เนื่องจากระบบมันได้ทำการ deploy ให้โดยอัตโนมัตินั้นเอง

แอพฯ ของเราพร้อมใช้งาน

หลังจากที่เว็บของเราได้ถูก deploy ขึ้นไปแล้วเราก็เริ่มสงสัยกันบ้างแล้วใช่มั้ยครับว่าแล้วมันทำงานอย่างไร GitLab มันรู้ได้อย่างไรว่า pipeline ของเรามีกี่ job และแต่ละ job มีขั้นตอน 1 2 3 4 อะไรยังไงบ้าง โดยพระเอกในขั้นตอนนี้ก็จะอยู่ที่ไฟล์ที่ชื่อว่า .gitlab-ci.yml ที่ใช้ในการกำหนดค่าและการทำงานให้กับเจ้าตัว GitLab CI ของเรา เดี๋ยวเรามาลองเปิดไฟล์กันดูไปพร้อมกันเลยนะครับ

โดย format ของไฟล์นี้ก็จะอยู่ในรูปแบบของไฟล์นามสกุล YAML ที่น่าจะคุ้นเคยกันดี โดยในไฟล์ของเราก็จะมีเพียงแค่ 3 job ด้วยกันคือ build, test และ deploy


pipeline ที่ใช้ในการสาธิตในครั้งนี้ก็จะมีอยู่ด้วยกัน 3 job คือ build, test และ deploy

โดยแต่ละ job จะประกอบด้วยองค์ประกอบพื้นฐานดังนี้

  1. jobname: คือชื่อของ job นั้นๆ เช่น build_linux, build_windows, unit_test, ui_test, deploy_staging, deploy_production เป็นต้น

  2. stage: เป็นการบอกให้ระบบรู้ว่า job นั้นๆ อยู่ในขั้นตอนไหนของ pipeline เช่นขั้นตอนการ build, test, deploy หรือขั้นตอนอื่นๆ ตามแต่เราจะกำหนด

  3. image: เป็นขั้นตอนในการกำหนด Image ที่ใช้ในการรัน script ของเราโดยจะอ้างอิง image จาก docker repository ( link )

  4. script: เป็นการกำหนดคำสั่งที่จะใช้ในแต่ละ job ว่าต้องมีอะไรบ้างเพื่อให้แต่ละ job นั้นสามารถทำงานได้ตรงตามวัตถุประสงค์

รูปแบบพื้นฐานของแต่ละ job

โดยในไฟล์ .gitlab-ci.yml ที่เราใช้จะมีในส่วนอื่นๆ อีกเช่น

  • before_script: เป็นขั้นตอนที่จะสั่งใน GitLab CI ทำการรันคำสั่งที่เรากำหนดทุกครั้งที่มีการเริ่มในแต่ละ job

  • after_script: เป็นขั้นตอนที่จะสั่งใน GitLab CI ทำการรันคำสั่งที่เรากำหนดทุกครั้งที่มีที่แต่ละ job ได้ทำงานเสร็จสิ้น

  • cache: เป็นตัวกำหนดให้มีการสำรองไฟล์ต่างๆ เก็บเอาไว้เพื่อจุดประสงค์ที่เรากำหนดเช่น ไฟล์ library ต่างใน maven หรือใน node_modules เพื่อไม่ให้ต้อง download ใหม่ทุกครั้งที่มีการรันในแต่ละ job ทำให้ประหยัดเวลาไปได้มาก

  • variables: เป็นการกำหนดตัวแปรที่จะใช้ภายใน pipeline ของเรา

  • stages: เป็นการกำหนดให้ GitLab CI รู้ว่าใน pipeline ของเรานั้นประกอบไปด้วยกี่ขั้นตอน

นอกจากนี้แล้วก็ยังมีขั้นตอนอื่นๆ ที่เราสามารถกำหนดได้อีกเยอะแยะมากมายซึ่งสามารถดูได้จากในเว็บไซต์ของทาง GitLab ได้เลยครับ https://docs.gitlab.com/ee/ci/yaml/


จากประสบการณ์ใช้งานเจ้า GitLab รวมถึงฟังก์ชั่น CI ที่เขามีมาให้ใช้ได้ฟรีๆ เดือนละ 2,000 ชั่วโมงแล้วพบว่ามันสามารถใช้งานได้เป็นอย่างดีเลยนะครับ แต่ในบริษัทผมจะไม่ได้ใช้ตัว shared runner ที่ทาง GitLab มีให้ใช้ฟรีๆ แต่ผมเลือกที่จะติดตั้งในเครื่อง server ของบริษัทผมเองแล้วเซ็ตให้มันผูกเข้ากับแต่ละโปรเจ็คของเราแทนครับ เพราะไม่ต้องรอและไม่ติดข้อจำกัดเดือนละ 2,000 ชั่วโมงดังที่กล่าวไปแล้วครับ


สำหรับในช่วงสุดท้ายของบทความนี้ก็ต้องขอขอบคุณทุกๆ ท่านที่ติดตามกันมาตลอดตั้งแต่ตอนแรก ก็หวังว่าทุกท่านจะสามารถนำเอาแนวคิดเรื่อง DevOps และ 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


ดู 300 ครั้ง