Panduan Implementasi Code Style Pipeline di GitLab CI/CD dengan Docker
Pipeline ini digunakan untuk mengotomatisasi formatting code style untuk PHP dan JavaScript/TypeScript menggunakan Docker image ramaid/image:php8.3-fullstack-cli-v2.0.3
. Pipeline akan berjalan setiap kali ada merge request dan secara otomatis memformat kode, commit perubahan, dan push ke branch yang sama.
π₯οΈ Screencast
π§ Konfigurasi
GitLab CI/CD Configuration
code-style:
tags:
- php
image: ramaid/image:php8.3-fullstack-cli-v2.0.3
stage: fix-code-style
variables:
GIT_STRATEGY: clone
π Prerequisites
- GitLab Runner dengan tag
php
- Access token dengan permission write ke repository (
CI_TOKEN
) - Laravel Pint untuk PHP formatting
- Prettier/ESLint untuk JavaScript formatting
π» Cara Kerja
1. Installation Dependencies
script:
- composer install --no-interaction --no-progress --quiet
- bun install --frozen-lockfile --silent
- Menginstall PHP dependencies via Composer
- Menginstall JavaScript dependencies via Bun
- Flag
--quiet
dan--silent
meminimalkan output log
2. Git Configuration
script:
- git config --global user.email "[email protected]"
- git config --global user.name "Judge GitLab"
- git remote set-url origin "http://oauth2:${CI_TOKEN}@192.168.68.116:8041/${CI_PROJECT_PATH}.git"
- git fetch origin
- Setup git user untuk commit
- Konfigurasi remote repository dengan authentication
- Fetch latest changes dari repository
3. Code Formatting
script:
- ./vendor/bin/pint
- bun run silent-format
pint
: Format PHP code menggunakan Laravel Pintsilent-format
: Format JavaScript/TypeScript code
4. Commit dan Push
script:
- git add .
- git diff --staged --quiet || git commit -m "Apply code style fixes"
- git push origin HEAD:$CI_COMMIT_REF_NAME
- Add semua perubahan
- Commit jika ada perubahan
- Push ke branch yang sama
π― Rules
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: never
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- Tidak berjalan di default branch (biasanya
main
ataumaster
) - Hanya berjalan saat ada merge request
πΎ Cache Configuration
cache:
key: ${CI_COMMIT_REF_SLUG}
fallback_keys:
- code-style
paths:
- vendor/
- node_modules/
- .git/
- Cache
vendor
directory untuk mempercepat instalasi - Menggunakan dynamic key berdasarkan branch
- Fallback ke cache
code-style
jika tidak ada
π¦ Artifacts
artifacts:
expire_in: 1 week
paths:
- vendor/
- node_modules/
- .git/
- Menyimpan
vendor
,node_modules
dan.git
sebagai artifacts - Expires dalam 1 minggu
- Berguna untuk subsequent jobs yang memerlukan dependencies
π Workflow
- Developer push code ke branch
- Developer membuat merge request
- Pipeline
fix-code-style
otomatis berjalan - Code diformat sesuai standar
- Perubahan di-commit dan di-push ke branch yang sama
- Merge request terupdate dengan formatted code
βοΈ Kustomisasi
PHP Formatting (Laravel Pint)
Buat file pint.json
di root project:
{
"preset": "laravel",
"rules": {
// Custom rules
}
}
JavaScript Formatting
Update package.json
:
{
"scripts": {
"silent-format": "prettier --write . --log-level silent"
}
}
π« Troubleshooting
Pipeline Gagal
- Cek permission token (
CI_TOKEN
) - Pastikan runner berjalan dengan user
root
- Verifikasi koneksi ke GitLab server
Format Tidak Berubah
- Cek konfigurasi Pint dan Prettier
- Pastikan file tidak di-ignore
- Verifikasi path di
.gitignore
π Best Practices
- Selalu gunakan versi spesifik untuk Docker image
- Simpan sensitive tokens di GitLab CI/CD variables
- Manfaatkan cache untuk optimasi pipeline
- Dokumentasikan custom rules
- Regular update dependencies