CI/CD dengan GitHub Actions
Uji dan terapkan PHP secara otomatis setiap kali ada push.
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@v4Tindakan 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, phpstanMenyimpan 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-progressKontainer 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=10Menjalankan 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-progressPembangunan 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=maxRahasia & 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-1Langkah 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=120sPemeriksaan 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.
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
- Membuat Aplikasi PHP Menjadi Kontainer
- Build Multi-Tahap dan Optimasi
- Docker Compose untuk Tumpukan Lokal
- CI/CD dengan GitHub Actions