PHP Academy · Pelajaran

CI/CD dengan GitHub Actions

Uji dan terapkan PHP secara otomatis setiap kali ada push.

Pelajaran 4 dari 413 langkah

CI/CD dengan GitHub Actions adalah pelajaran PHP Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PHP Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PHP Academy mencakup 4 pelajaran total.

CI/CD untuk PHP

Setiap pengiriman kode harus diuji, diperiksa lint, dianalisis secara statis, dan — ketika berhasil di cabang utama — dibangun menjadi citra lalu diterapkan. GitHub Actions menjalankan alur ini pada pelaksana terkelola yang dipicu oleh peristiwa repositori.

Kita akan membuat alur kerja yang menjalankan PHPUnit pada layanan MySQL nyata, menyimpan Composer dalam tembolok, menjalankan PHPStan, membangun citra Docker, lalu melakukan penerapan.

Anatomi Alur Kerja

Sebuah alur kerja berada di .github/workflows/*.yml. Alur kerja tersebut memiliki pemicu on:, satu atau beberapa jobs:, dan setiap pekerjaan memiliki steps:. Pekerjaan berjalan secara paralel pada pelaksana yang terisolasi, kecuali dihubungkan melalui needs:.

name: CI
on:
  push:
    branches: [main]
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

Tindakan setup-php

shivammathur/setup-php adalah cara standar untuk memasang versi PHP tertentu beserta ekstensi dan alat yang dipilih (Composer, PHPStan, dan sebagainya) pada pelaksana — jauh lebih cepat daripada membangun citra hanya untuk pengujian.

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
          extensions: pdo_mysql, intl, redis, zip
          coverage: pcov
          tools: composer:v2, phpstan

Menyimpan Composer dalam Tembolok

Mengunduh ulang dependensi setiap kali proses berjalan membuang waktu beberapa menit. Simpan direktori Composer dalam tembolok dengan kunci berdasarkan hash composer.lock, sehingga tembolok hanya menjadi tidak valid ketika dependensi berubah.

      - name: Get Composer cache dir
        id: composer-cache
        run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

      - uses: actions/cache@v4
        with:
          path: ${{ steps.composer-cache.outputs.dir }}
          key: composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: composer-

      - run: composer install --prefer-dist --no-progress

Kontainer Layanan

Pekerjaan dapat menjalankan kontainer layanan — MySQL atau Redis nyata yang dapat dijangkau pelaksana melalui 127.0.0.1. Tambahkan pemeriksaan kesehatan melalui options agar langkah-langkah tidak berjalan sebelum basis data siap.

  test:
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:8.4
        env:
          MYSQL_DATABASE: app_test
          MYSQL_ROOT_PASSWORD: root
        ports: ['3306:3306']
        options: >-
          --health-cmd="mysqladmin ping -proot"
          --health-interval=5s --health-retries=10

Menjalankan Pengujian & Cakupan

Setelah dependensi terpasang dan MySQL berjalan, jalankan PHPUnit. Arahkan DSN pengujian ke 127.0.0.1:3306. Hasilkan cakupan dan, bila perlu, gagalkan pembangunan jika berada di bawah ambang batas.

      - name: Run PHPUnit
        env:
          DATABASE_URL: "mysql://root:root@127.0.0.1:3306/app_test"
        run: vendor/bin/phpunit --coverage-clover=coverage.xml

      - name: Static analysis
        run: phpstan analyse src --level=8 --no-progress

Pembangunan Matriks

Pustaka harus berhasil pada beberapa versi PHP. strategy.matrix menyebarkan pekerjaan menjadi proses paralel, satu untuk setiap kombinasi, dengan ${{ matrix.php }} disisipkan ke dalam langkah-langkah tersebut.

  test:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        php: ['8.2', '8.3', '8.4']
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}

Menghitung Label Citra

Penerapan memerlukan label citra yang unik dan dapat dilacak. SHA commit adalah pilihan konvensional. Cuplikan ini menunjukkan logika penurunan label yang akan Anda nyatakan dalam alur kerja — mengubah referensi dan SHA menjadi label registri.

<?php
// Mirrors what the workflow computes for the image tag
$ref = 'refs/heads/main';
$sha = '9f41efadc0de1234567890abcdef0000deadbeef';

$branch = str_replace('refs/heads/', '', $ref);
$shortSha = substr($sha, 0, 7);
$tag = sprintf('registry.example.com/app:%s-%s', $branch, $shortSha);

echo $tag . PHP_EOL;          // registry.example.com/app:main-9f41efa
echo 'is_main: ' . ($branch === 'main' ? 'yes' : 'no') . PHP_EOL;
?>

Membangun & Mengirim Citra

Pada cabang utama, bangun citra Docker dengan docker/build-push-action menggunakan BuildKit dan tembolok GitHub Actions. Masuk ke registri dengan token rahasia terlebih dahulu; jangan pernah menanamkan kredensial secara langsung.

  build:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - uses: docker/build-push-action@v6
        with:
          push: true
          target: runtime
          tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

Rahasia & OIDC

Simpan kredensial dalam rahasia repositori atau lingkungan, yang dirujuk sebagai ${{ secrets.NAME }} — kredensial tersebut disamarkan dalam catatan. Untuk penerapan ke awan, utamakan OIDC: pelaksana memperoleh token berumur singkat dari AWS/GCP melalui permissions: id-token: write, sehingga tidak ada kunci berumur panjang yang tersimpan di repositori.

  deploy:
    needs: build
    runs-on: ubuntu-latest
    permissions:
      id-token: write     # enables OIDC
      contents: read
    steps:
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/deploy
          aws-region: eu-central-1

Langkah Penerapan & Lingkungan

Lindungi penerapan produksi dengan GitHub environment (secara opsional dengan peninjau wajib). Langkah penerapan kemudian memicu peluncuran Anda — memperbarui deployment Kubernetes, layanan ECS, atau menjalankan SSH untuk menarik citra baru.

  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment:
      name: production       # can require manual approval
      url: https://app.example.com
    steps:
      - name: Roll out
        run: |
          kubectl set image deployment/app \
            app=ghcr.io/${{ github.repository }}:${{ github.sha }}
          kubectl rollout status deployment/app --timeout=120s

Pemeriksaan Singkat

Apa keunggulan keamanan utama OIDC dibandingkan kunci awan yang disimpan dalam Actions?

Rangkuman

Anda telah membangun alur CI/CD PHP di GitHub Actions: pemicu saat pengiriman kode/PR, setup-php dengan ekstensi, Composer yang disimpan dalam tembolok berdasarkan berkas pengunci, kontainer layanan MySQL dengan pemeriksaan kesehatan, PHPUnit + PHPStan, matriks versi, lalu pembangunan-pengiriman khusus cabang utama dengan tembolok GHA dan penerapan yang diautentikasi dengan OIDC serta dibatasi oleh lingkungan.

Prinsip: gunakan hash berkas pengunci untuk tembolok, pastikan layanan siap melalui pemeriksaan kesehatan, beri label citra berdasarkan SHA, dan utamakan OIDC daripada kunci yang disimpan.

Gratis untuk memulai

Belajar PHP dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
49
Pelajaran
195

Pertanyaan yang Sering Diajukan

Apakah pelajaran “CI/CD dengan GitHub Actions” gratis?

Ya — teks lengkap “CI/CD dengan GitHub Actions” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PHP Academy, upgrade ke CoddyKit PRO. Kursus PHP Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “CI/CD dengan GitHub Actions”?

Uji dan terapkan PHP secara otomatis setiap kali ada push. Kamu berlatih PHP Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai PHP Academy?

Tidak diperlukan pengalaman sebelumnya. PHP Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “CI/CD dengan GitHub Actions” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran PHP Academy ini?

Ya. Setiap pelajaran PHP Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Membuat Aplikasi PHP Menjadi Kontainer
  2. Build Multi-Tahap dan Optimasi
  3. Docker Compose untuk Tumpukan Lokal
  4. CI/CD dengan GitHub Actions
← Kembali ke PHP Academy