← Writing
Development & Cloud

รีวิว DevSecOps Transformation & Technologies — Skooldio (Part 1/3)

พัฒนา Software อย่างมีประสิทธิภาพ ด้วย DevSecOps

15 Dec 202411 min readDashboard

รีวิว DevSecOps Transformation & Technologies — Skooldio (Part 1/3)

พัฒนา Software อย่างมีประสิทธิภาพ ด้วย DevSecOps

Connect with me and follow our journey: Linkedin, Facebook


Course Overview

คอร์ส DevSecOps Transformation & Technologies (พัฒนา Software อย่างมีประสิทธิภาพ ด้วย DevSecOps) จาก Skooldio เป็นการปูพื้นฐาน DevSecOps โดยเน้นไปที่ Mindset และหลักการทำงาน มากกว่าการใช้เครื่องมือหรือการเขียนโค้ด สิ่งที่ชอบในคอร์สนี้คือการอธิบายภาพรวมของ DevSecOps ได้อย่างชัดเจน ช่วยให้เข้าใจแนวคิดหลักและสามารถนำไปต่อยอดได้ หัวข้อหลักๆ ในคอร์สประกอบด้วย:

  1. Introduction
  2. CI/CD and Artifacts
  3. Infrastructure: Cloud, Container, Docker, Kubernetes
  4. Monitoring
  5. Automation Security
  6. How to Start DevSecOps

1. Introduction

What is DevSecOps?

  • DevSecOps ย่อมาจาก Development (การพัฒนา), Security (ความปลอดภัย), และ Operations (การปฏิบัติการ)
  • DevSecOps คือ Mindset ที่ผสาน Security เข้ากับ DevOps ช่วยให้การพัฒนาซอฟต์แวร์มีความปลอดภัย, คล่องตัว, และมีประสิทธิภาพ โดยใช้ Automation และความร่วมมือของทีม Dev, Ops, และ Sec ในทุกขั้นตอน

DevSecOps Workflow

  • DevSecOps ประกอบขึ้นจาก DevOps Workflow ดังนี้:
    Plan → Code → Build → Test → Package → Release → Configure → Monitor

Figure: DevOps Photo from https://proeffico.com/devops-devsecops/

  • และเสริม Securityเข้าไปในทุกขั้นตอน (Security in Every Step with Automation)

Figure: DevSecOps Photo from https://www.dynatrace.com/news/blog/what-is-devsecops/

Key Concepts of DevSecOps

  • Integration of Security Early (Shift-Left): ใส่ Security ตั้งแต่ต้นกระบวนการ
  • Collaboration Across Teams: ลด Silo ระหว่างทีม Dev, Ops, และ Sec
  • Automation of Security Processes: ใช้ Automation ผนวก Security ใน CI/CD Pipeline
  • Continuous Monitoring and Feedback: ตรวจสอบและปรับปรุงอย่างต่อเนื่อง

Environment in DevSecOps

Environment หมายถึงพื้นที่ในการพัฒนาหรือทดสอบระบบ แบ่งได้ 4 ประเภทหลัก:

  1. Development (Dev) Environment:
    - ใช้โดยทีม Developer สำหรับเขียนและทดสอบโค้ดเบื้องต้น
    - เน้นความยืดหยุ่น สามารถ Reset ได้ง่าย
  2. User Acceptance Testing (UAT) Environment:
    - ใช้ตรวจสอบ UX/UI และ Business Logic ว่าตรงตามความต้องการผู้ใช้หรือไม่
    - ทดสอบโดย QA หรือผู้ใช้ปลายทาง
  3. Staging Environment:
    - จำลองสภาพแวดล้อม Production สำหรับทดสอบขั้นสุดท้าย
    - เน้นการทดสอบ Performance, Load Testing และ Security
  4. Production Environment:
    - ระบบที่ใช้งานจริงโดยผู้ใช้ปลายทาง
    - ต้องมีความเสถียร, ปลอดภัย, และมีการ Monitoring อย่างต่อเนื่อง

DevSecOps and Agile

  • Agile: Framework Framework การทำงานแบบยืดหยุ่นที่เน้นการส่งมอบงานเร็ว ปรับเปลี่ยนไว และทำงานเป็นรอบสั้นๆ ตามความต้องการของลูกค้า โดยใน DevSecOps Workflow นั้น Agile จะเน้นที่ Plan, Code, Build, และ Test

Figure: DevSecOps and Agile (Image by Author)

  • Scrum: DevSecOps อยู่ใน Sprint และ Sprint Review

Version Control System (VCS)

  • VCS เป็นระบบจัดการเวอร์ชันของโค้ด ช่วยให้ทีมพัฒนาติดตามการเปลี่ยนแปลงและทำงานร่วมกันได้อย่างมีประสิทธิภาพ
  • Git: เป็นระบบ VCS ที่นิยมมากที่สุด มี Feature สำคัญคือ Branching ช่วยให้ Developer สามารถทำงานแยกกันได้แบบขนาน โดยไม่กระทบกับ Code หลัก

2. CI/CD and Artifacts

Figure: CI/CD ใน DevOps Work Flow (Image by Author)

Continuous Integration (CI)

  • Continuous Integration (CI): กระบวนการรวมโค้ดจากนักพัฒนาหลายคนเข้าด้วยกันอย่างอัตโนมัติ พร้อมตรวจสอบคุณภาพโค้ดผ่านขั้นตอน Build, Test, และ Package
  • Build: ขั้นตอนการแปลง Source Code และ Dependencies ซึ่งรวมไปถึง:
    - Compile: แปลง Source Code เป็น Machine Code หรือ Bytecode
    - Dependency Management: จัดการ Third-party Libraries เช่น requirements.txt ใน Python
    - Package: รวมไฟล์ให้อยู่ในรูปแบบที่ Deploy ได้ เช่น Docker Image
  • Package Manager (PM) ที่นิยมใช้กับ Python คือ poetry

Key Focus ใน DevSecOps - รู้ว่า Developer ดึงอะไรมาใช้งานบ้าง: เช่น Third-party Libraries, Tools
- ตรวจสอบ Dependencies: Third-party Libraries ที่ดึงมาใช้ปลอดภัยหรือไม่
- ตรวจจับช่องโหว่: ในขั้นตอน Build มีช่องโหว่หรือไม่

  • **Test:**ตรวจสอบคุณภาพ, ฟีเจอร์, และความปลอดภัยของซอฟต์แวร์หรือระบบ ตัวอย่างประเภทของการทดสอบ:
    - Unit Test: ทดสอบโค้ดส่วนเล็กๆ เช่น ฟังก์ชันหรือเมธอด
    - Integration Test: ทดสอบการทำงานร่วมกันของโมดูลต่างๆ
    - Functional Test: ตรวจสอบว่าระบบทำงานตามที่ระบุใน Requirements
    - Performance Test: ทดสอบประสิทธิภาพ (ความเร็ว, การรองรับ Load)
    - Acceptance Test: ทดสอบว่าเป็นไปตามความต้องการของลูกค้าหรือไม่
    - UI Test: ทดสอบส่วนติดต่อผู้ใช้งาน (UX/UI)

สิ่งสำคัญของ Test - ตกลงนิยามเรื่อง Test แต่ละประเภทให้ชัดเจน
- กำหนดผู้รับผิดชอบในแต่ละ Test

  • ตัวอย่างเครื่องมือที่นิยมใช้:
    - Unit Test: JUnit (Java), PyTest (Python), Jest (JavaScript/TypeScript)
    - UI Test / Browser Simulation Test: Selenium, Cypress, Puppeteer
  • Behavior Driven Development (BDD): แนวทางการเขียนเทสที่เข้าใจง่ายในรูปแบบ ภาษาเชิงพฤติกรรม เช่น Given-When-Then ช่วยให้ทุกคนในทีม (Dev, QA, Business) เข้าใจตรงกัน Tools ที่นิยมเช่น Cucumber
  • Cloud-Based Testing: การใช้ Infrastructure บน Cloud สำหรับรันการทดสอบแบบอัตโนมัติ โดย Tools ที่นิยมได้แก่ BrowserStack, Sauce Labs

DevSecOps:
มุ่งเน้นการเขียน Automated Tests ที่รวดเร็วและรันได้ผ่าน Command Line โดยไม่ต้องแสดง GUI เพื่อให้การทำ Automation ง่ายและไวขึ้น

  • Package: การรวบรวมไฟล์และโค้ดทั้งหมดที่จำเป็นสำหรับการ Deploy ให้อยู่ในรูปแบบที่พร้อมใช้งาน เช่น Docker Image เมื่อทำ Packaging เสร็จแล้ว Output ที่ได้เรียกว่า Artifacts
  • Artifacts: ผลลัพธ์จากขั้นตอน Build, Compile หรือ Test ซึ่งพร้อมสำหรับการ Deploy (รวมถึง Report ของการ Testing) Artifacts ที่ได้นั้นขึ้นอยู่กับ Programming language และวิธีการ Deploy เช่น
    - Java: ผลลัพธ์จาก Gradle หรือ Maven
    - Python: โฟลเดอร์ที่รวม Script หรือ Libraries
    - Test Reports: ผลลัพธ์จากการทดสอบ
  • Packaging Tools (Artifacts Server): Artifacts ที่สร้างขึ้นจะถูกจัดเก็บใน Artifacts Server เพื่อความสะดวกในการจัดการและนำไป Deploy ตัวอย่าง Artifacts Server ที่นิยมใช้: Nexus Repository, GitLab Package Registry, JFrog Artifactory, etc.

Continuous Delivery/Deployment (CD)

  • Continuous Delivery/Deployment (CD): ขั้นตอนการนำโค้ดที่ผ่าน CI ไป Deploy โดยอัตโนมัติ ซึ่งครอบคลุมขั้นตอน Release และ Configure
  • Release: การนำโค้ดที่ผ่านการทดสอบไปใช้งานใน Production หรือ Environment อื่นๆ อย่างเป็นระบบ
  • Release Strategies สามารถแบ่งได้เป็น 2 หมวดใหญ่:
    - Deployment: กลยุทธ์การ Roll Out เวอร์ชันใหม่
    - Feature: กลยุทธ์การทดสอบฟีเจอร์ใหม่ๆ
  • Release Strategies for Deployment: เป็นวิธีที่ช่วยให้การ Deploy เวอร์ชันใหม่เกิดขึ้นอย่างราบรื่น โดยมีหลายวิธีดังนี้:
    - Recreate/Replace Deployment: ลบระบบเก่าและแทนที่ด้วยระบบใหม่
    - Rolling Deployment: ค่อยๆ ทดแทนระบบเก่าด้วยระบบใหม่ทีละส่วน
    - Blue-Green Deployment (หรือ Red-Black Deployment) ใช้ 2 ระบบคู่ขนาน สลับ Traffic ไปยังระบบใหม่
    - Canary Deployment ทดสอบระบบใหม่กับผู้ใช้งานบางส่วนก่อน
  • Release Strategies for Feature: ช่วยในการทดสอบฟีเจอร์ใหม่ๆ:
    - Environment Separation: สร้าง Environment แยกเฉพาะสำหรับฟีเจอร์ใหม่
    - A/B Testing: ทดสอบฟีเจอร์ใหม่ (Version B) กับผู้ใช้งานบางส่วน เปรียบเทียบกับฟีเจอร์เดิม (Version A) เพื่อตัดสินใจว่า Version ใดทำงานได้ดีกว่า
    - Feature Toggle (Feature Flag): ใช้ Code Base เดียวกัน แต่ควบคุมการเปิด/ปิดฟีเจอร์ใหม่ผ่านตัวควบคุม (Flag)
    - User Targeted Testing: ทดสอบฟีเจอร์ใหม่เฉพาะกับผู้ใช้งานกลุ่มเป้าหมาย เช่น Beta Users หรือ Internal Users
  • เครื่องมือที่นิยมใช้สำหรับ CI/CD
    - On-Premise Open Source: GitLab Runner/GitLab CI, Jenkins
    - On-Premise Commercial (มี GUI): Bamboo
    - On-Cloud: CircleCI, Travis CI, Azure DevOps
  • Pipeline as Code: การเขียนขั้นตอนการทำงานของ CI/CD Pipeline เป็น โค้ด แทนการตั้งค่าผ่าน GUI (Graphical User Interface)

Figure: สรุปภาพรวมเนื้อหาในส่วนที่ 1 (Image by Author)

ใน Part 1/3 นี้ เราได้เรียนรู้เกี่ยวกับภาพรวมของ DevSecOps, CI/CD และ Artifacts ซึ่งเป็นส่วนสำคัญในการพัฒนาซอฟต์แวร์ให้มีประสิทธิภาพและปลอดภัย ในตอนถัดไป เราจะเจาะลึกเรื่อง Infrastructure: Cloud, Container, Docker, Kubernetes ฝากติดตามด้วยนะครับ!


Data Science Explore the world of data science with Donato_Story

Dashboard Discover the power of data visualization with Donato_Story

Donato_Journey Join me on my journey (Thai version)

Course_Review Discover the training courses with Donato_Story (Thai version)

Let’s Connect!

Your feedback is invaluable. Feel free to share your thoughts or questions in the comments below. You can also connect with me on:

Originally published on Medium

Related