跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

การใช้งาน CI/CD Pipeline กับ PHP

การใช้งาน CI/CD Pipeline กับ PHP

ในบทก่อนหน้า เราได้เรียนรู้เกี่ยวกับการ Config Composer สำหรับ Project ขนาดใหญ่ เพื่อจัดการ Dependencies และเพิ่มประสิทธิภาพการโหลด Class ในโปรเจกต์ของเรา ในบทนี้ เราจะมาต่อยอดความรู้โดยการนำ CI/CD Pipeline มาใช้ เพื่อ Automate การ Build, Test และ Deploy โค้ด PHP ของเราอย่างมีประสิทธิภาพ

CI/CD คืออะไร และทำไมถึงสำคัญ?

CI/CD ย่อมาจาก Continuous Integration และ Continuous Delivery/Deployment เป็นแนวทางปฏิบัติในการพัฒนาซอฟต์แวร์ที่เน้นการ Automate กระบวนการตั้งแต่การ Build, Test, และ Deploy โค้ด เพื่อให้สามารถส่งมอบซอฟต์แวร์ที่มีคุณภาพได้อย่างรวดเร็วและสม่ำเสมอ

  • Continuous Integration (CI): เน้นการรวมโค้ดจากนักพัฒนาหลายคนเข้าด้วยกันอย่างสม่ำเสมอ (เช่น ทุกวัน หรือทุกครั้งที่มีการ Commit โค้ด) พร้อมทั้งทำการ Build และ Test โค้ดโดยอัตโนมัติ เพื่อตรวจจับปัญหาตั้งแต่เนิ่นๆ
  • Continuous Delivery (CD): เป็นการต่อยอดจาก CI โดย Automate กระบวนการ Release โค้ดไปยัง Staging Environment หรือ Production Environment ทำให้พร้อมที่จะ Deploy ได้ตลอดเวลา
  • Continuous Deployment (CD): เป็นการ Automate กระบวนการ Deploy โค้ดไปยัง Production Environment โดยอัตโนมัติ เมื่อผ่านการ Test ทั้งหมดแล้ว

ทำไม CI/CD ถึงสำคัญ?

  • ลดความเสี่ยง: ตรวจจับปัญหาตั้งแต่เนิ่นๆ ทำให้ลดความเสี่ยงในการ Deploy โค้ดที่มี Bug
  • เพิ่มความเร็ว: Automate กระบวนการต่างๆ ทำให้ Deploy โค้ดได้เร็วขึ้น
  • ปรับปรุงคุณภาพ: ทำการ Test อย่างสม่ำเสมอ ทำให้มั่นใจได้ว่าโค้ดมีคุณภาพ
  • ลดภาระงาน: Automate งานที่น่าเบื่อ ทำให้ทีมพัฒนาสามารถโฟกัสกับงานที่สำคัญกว่าได้

เครื่องมือ CI/CD ที่นิยมใช้กับ PHP

มีเครื่องมือ CI/CD มากมายให้เลือกใช้ แต่ในบทนี้เราจะเน้นที่ 3 เครื่องมือที่นิยมใช้กับ PHP ได้แก่:

  • Jenkins: เป็นเครื่องมือ CI/CD แบบ Open Source ที่ได้รับความนิยมมาอย่างยาวนาน มี Plugin มากมายให้เลือกใช้ และสามารถปรับแต่งได้หลากหลาย
  • GitLab CI: เป็นเครื่องมือ CI/CD ที่รวมอยู่ใน GitLab Platform ทำให้สะดวกในการใช้งานสำหรับทีมที่ใช้ GitLab อยู่แล้ว
  • GitHub Actions: เป็นเครื่องมือ CI/CD ที่รวมอยู่ใน GitHub Platform ทำให้สะดวกในการใช้งานสำหรับทีมที่ใช้ GitHub อยู่แล้ว

ตัวอย่างการใช้งาน Jenkins กับ PHP

Jenkins เป็นเครื่องมือ CI/CD ที่ต้องติดตั้งและ Config บน Server ของเราเอง (Self-Hosted) ซึ่งอาจจะยุ่งยากกว่าเครื่องมืออื่นๆ แต่ก็มีความยืดหยุ่นสูงกว่า

ขั้นตอนการใช้งาน Jenkins กับ PHP:

  1. ติดตั้ง Jenkins: ดาวน์โหลดและติดตั้ง Jenkins จาก https://www.jenkins.io/
  2. ติดตั้ง Plugin ที่จำเป็น: เช่น PHP, Composer, Git
  3. สร้าง Job ใหม่: ใน Jenkins ให้สร้าง Job ใหม่สำหรับ Project PHP ของเรา
  4. Config Source Code Management: กำหนดให้ Jenkins ดึงโค้ดจาก Git Repository ของเรา
  5. Config Build Steps: กำหนดขั้นตอนการ Build ที่ Jenkins จะต้องทำ เช่น:
    • ติดตั้ง Dependencies ด้วย composer install
    • รัน Unit Tests ด้วย ./vendor/bin/phpunit
    • รัน Static Analysis Tools
  6. Config Post-build Actions: กำหนดขั้นตอนหลังการ Build เช่น Deploy โค้ดไปยัง Staging Environment
  7. ทดสอบการ Build: กด Build Now เพื่อทดสอบว่า Jenkins สามารถ Build โค้ดของเราได้หรือไม่

ตัวอย่าง Jenkinsfile (Pipeline as Code):

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/your-username/your-repo.git'
            }
        }
        stage('Install Dependencies') {
            steps {
                sh 'composer install'
            }
        }
        stage('Run Tests') {
            steps {
                sh './vendor/bin/phpunit'
            }
        }
        stage('Deploy to Staging') {
            steps {
                // Replace with your deployment script
                sh 'echo "Deploying to staging..."'
            }
        }
    }
}

คำอธิบาย:

  • agent any: กำหนดให้ Jenkins สามารถรัน Pipeline บน Agent ใดก็ได้
  • stages: กำหนด Stage ต่างๆ ใน Pipeline
  • stage('Checkout'): ดึงโค้ดจาก Git Repository
  • stage('Install Dependencies'): ติดตั้ง Dependencies ด้วย Composer
  • stage('Run Tests'): รัน Unit Tests ด้วย PHPUnit
  • stage('Deploy to Staging'): Deploy โค้ดไปยัง Staging Environment (ต้องปรับแต่งตาม Environment ของคุณ)

ตัวอย่างการใช้งาน GitLab CI กับ PHP

GitLab CI เป็นเครื่องมือ CI/CD ที่ใช้งานง่าย เพราะรวมอยู่ใน GitLab Platform อยู่แล้ว

ขั้นตอนการใช้งาน GitLab CI กับ PHP:

  1. สร้างไฟล์ .gitlab-ci.yml: สร้างไฟล์นี้ใน Root Directory ของ Project PHP ของเรา
  2. กำหนด Stages: กำหนด Stage ต่างๆ ในไฟล์ .gitlab-ci.yml เช่น build, test, deploy
  3. กำหนด Jobs: กำหนด Job ต่างๆ ในแต่ละ Stage โดยระบุ Image Docker ที่จะใช้ และคำสั่งที่จะรัน
  4. Commit และ Push: Commit และ Push ไฟล์ .gitlab-ci.yml ไปยัง GitLab Repository
  5. ตรวจสอบ Pipeline: GitLab จะทำการรัน Pipeline โดยอัตโนมัติ

ตัวอย่าง .gitlab-ci.yml:

image: php:7.4-cli

stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - composer install --no-interaction --prefer-dist

test:
  stage: test
  script:
    - ./vendor/bin/phpunit

deploy:
  stage: deploy
  script:
    # Replace with your deployment script
    - echo "Deploying to production..."
  only:
    - master

คำอธิบาย:

  • image: php:7.4-cli: กำหนด Image Docker ที่จะใช้เป็น PHP 7.4 CLI
  • stages: กำหนด Stage ต่างๆ ใน Pipeline
  • build: Stage สำหรับการติดตั้ง Dependencies
  • test: Stage สำหรับการรัน Unit Tests
  • deploy: Stage สำหรับการ Deploy โค้ดไปยัง Production Environment (ต้องปรับแต่งตาม Environment ของคุณ)
  • only: - master: กำหนดให้ Stage deploy รันเฉพาะเมื่อมีการ Push โค้ดไปยัง Branch master เท่านั้น

ตัวอย่างการใช้งาน GitHub Actions กับ PHP

GitHub Actions คล้ายกับ GitLab CI คือใช้งานง่ายและรวมอยู่ใน GitHub Platform อยู่แล้ว

ขั้นตอนการใช้งาน GitHub Actions กับ PHP:

  1. สร้าง Directory .github/workflows: สร้าง Directory นี้ใน Root Directory ของ Project PHP ของเรา
  2. สร้างไฟล์ YAML: สร้างไฟล์ YAML ใน Directory .github/workflows เช่น main.yml
  3. กำหนด Workflow: กำหนด Workflow ในไฟล์ YAML โดยระบุ Trigger, Jobs, และ Steps
  4. Commit และ Push: Commit และ Push ไฟล์ YAML ไปยัง GitHub Repository
  5. ตรวจสอบ Actions: GitHub จะทำการรัน Actions โดยอัตโนมัติ

ตัวอย่าง .github/workflows/main.yml:

name: PHP CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '7.4'
        extensions: mbstring, xml, mysql, intl, pdo, pdo_mysql

    - name: Install Dependencies
      run: composer install --no-interaction --prefer-dist

    - name: Run Tests
      run: ./vendor/bin/phpunit

คำอธิบาย:

  • name: PHP CI: กำหนดชื่อ Workflow
  • on: กำหนด Trigger ที่จะทำให้ Workflow ทำงาน (เช่น Push หรือ Pull Request ไปยัง Branch master)
  • jobs: กำหนด Jobs ต่างๆ ใน Workflow
  • runs-on: ubuntu-latest: กำหนด Operating System ที่จะใช้รัน Job
  • steps: กำหนด Steps ต่างๆ ในแต่ละ Job
  • uses: actions/checkout@v2: ใช้ Action actions/checkout@v2 เพื่อ Checkout โค้ด
  • uses: shivammathur/setup-php@v2: ใช้ Action shivammathur/setup-php@v2 เพื่อ Setup PHP
  • run: composer install ...: รันคำสั่ง Composer เพื่อติดตั้ง Dependencies
  • run: ./vendor/bin/phpunit: รันคำสั่ง PHPUnit เพื่อรัน Unit Tests

สรุป

การใช้งาน CI/CD Pipeline ช่วยให้เรา Automate กระบวนการ Build, Test, และ Deploy โค้ด PHP ของเราได้อย่างมีประสิทธิภาพ ทำให้สามารถส่งมอบซอฟต์แวร์ที่มีคุณภาพได้อย่างรวดเร็วและสม่ำเสมอ ในบทนี้เราได้เรียนรู้เกี่ยวกับ Jenkins, GitLab CI, และ GitHub Actions ซึ่งเป็นเครื่องมือ CI/CD ที่นิยมใช้กับ PHP คุณสามารถเลือกใช้เครื่องมือที่เหมาะสมกับ Project และทีมของคุณได้

ในบทถัดไป เราจะมาเรียนรู้เกี่ยวกับการทำ Security Audits สำหรับ PHP เพื่อตรวจสอบหาช่องโหว่ด้านความปลอดภัยในโค้ดของเรา

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务