Cara Setup CI/CD Pipeline: Panduan Otomasi Deployment Website 2026

Cara Setup CI/CD Pipeline: Dari Manual ke Otomatis dalam Satu Panduan
Cara setup CI/CD pipeline adalah keterampilan yang memisahkan developer biasa dari developer profesional. CI/CD - singkatan dari Continuous Integration dan Continuous Deployment (atau Continuous Delivery) - adalah praktik DevOps yang mengotomasi proses pengujian dan pengiriman kode dari repositori ke server produksi.
Tanpa CI/CD, alur kerja deployment biasanya terasa seperti ritual yang menegangkan: pastikan tidak ada yang lupa, jalankan perintah satu per satu, berharap tidak ada yang salah. Dengan CI/CD pipeline yang tepat, proses itu menjadi terprediksi, terotomasi, dan jauh lebih aman.
Artikel ini membahas cara setup CI/CD pipeline secara komprehensif - mulai dari memahami konsep, memilih platform yang tepat, hingga contoh implementasi nyata untuk website PHP, Laravel, WordPress, dan Next.js yang banyak digunakan developer Indonesia.
Apa Itu CI/CD Pipeline?
Pipeline CI/CD adalah serangkaian langkah otomatis yang kode Anda lalui setelah di-push ke repositori, mulai dari pengujian hingga tersedia di server produksi.

Continuous Integration (CI)
CI adalah praktik mengintegrasikan perubahan kode sesering mungkin - idealnya beberapa kali sehari - ke branch utama, disertai pengujian otomatis setiap kali ada perubahan. Tujuannya adalah mendeteksi bug sedini mungkin sebelum masuk production.
Tahapan CI yang umum:
- Developer push kode ke repositori Git
- Pipeline otomatis terpicu
- Kode di-build (kompilasi, transpilasi)
- Unit tests dan integration tests dijalankan
- Static code analysis (linting, code style) dilakukan
- Security scanning untuk kerentanan dependencies
- Hasil pass/fail dilaporkan ke developer
Continuous Deployment (CD)
CD adalah kelanjutan dari CI - setelah semua tests lulus, kode secara otomatis di-deploy ke environment target (staging dan/atau production) tanpa intervensi manual. Ini berarti setiap perubahan kode yang lolos semua pengecekan akan langsung tersedia bagi pengguna.
Continuous Delivery vs Continuous Deployment
Keduanya sering disingkat CD, namun ada perbedaan penting:
- Continuous Delivery: Kode siap di-deploy kapan saja, namun deployment ke production tetap membutuhkan persetujuan (approval) manual. Cocok untuk lingkungan yang butuh kontrol ketat.
- Continuous Deployment: Deployment ke production terjadi otomatis setiap CI lulus, tanpa approval manual. Cocok untuk tim yang sudah mature dengan test coverage tinggi.
Manfaat CI/CD Pipeline bagi Developer Indonesia
- Eliminasi human error: Setiap langkah deploy dijalankan persis sama setiap saat - tidak ada lagi lupa jalankan migrasi atau lupa update konfigurasi
- Feedback cepat: Bug terdeteksi dalam menit setelah kode di-push, bukan setelah sampai ke pengguna
- Deploy kapan saja dengan aman: Tidak perlu takut deploy saat Jumat sore - pipeline yang baik membuat deploy rutin menjadi berisiko rendah
- Dokumentasi deployment: Setiap deploy tercatat lengkap dengan siapa yang deploy, kapan, dan kode apa yang berubah
- Kolaborasi tim lebih lancar: Konflik kode terdeteksi lebih awal saat semua orang sering integrasi ke branch utama
Memilih Platform CI/CD yang Tepat
Ada banyak platform CI/CD yang tersedia. Berikut perbandingan pilihan populer untuk developer Indonesia:
| Platform | Gratis | Kemudahan | Cocok untuk |
|---|---|---|---|
| GitHub Actions | 2.000 mnt/bln (privat) | Sangat mudah | Pengguna GitHub, semua stack |
| GitLab CI/CD | 400 mnt/bln | Mudah | Pengguna GitLab, self-hosted |
| Bitbucket Pipelines | 50 mnt/bln | Mudah | Pengguna Bitbucket + Jira |
| Jenkins | Gratis (self-hosted) | Kompleks | Tim besar, highly customized |
| CircleCI | 6.000 mnt/bln | Mudah-sedang | Startup, performa tinggi |
Untuk developer Indonesia yang baru memulai CI/CD, GitHub Actions adalah rekomendasi utama karena terintegrasi langsung dengan GitHub (platform Git paling populer), gratis, dan memiliki dokumentasi serta komunitas yang sangat besar.
Anatomi CI/CD Pipeline yang Lengkap
Pipeline CI/CD yang matang biasanya terdiri dari beberapa stage berurutan. Jika satu stage gagal, pipeline berhenti dan tidak melanjutkan ke stage berikutnya - ini mencegah kode rusak mencapai production.
Stage 1: Source
Pipeline dimulai saat ada perubahan di repositori - biasanya git push ke branch tertentu atau pull request yang dibuat. Event ini adalah trigger yang memulai segalanya.
Stage 2: Build
Kode di-build sesuai teknologi yang digunakan:
- JavaScript/TypeScript:
npm run buildatauyarn build - PHP/Laravel:
composer install, kompilasi assets dengannpm run build - Java/Go: kompilasi ke binary executable
- Docker: build container image
Stage 3: Test
Ini adalah inti dari CI. Berbagai jenis test dijalankan:
- Unit tests: Test fungsi/method individual secara terisolasi
- Integration tests: Test interaksi antar komponen
- End-to-end tests: Simulasi interaksi pengguna di browser nyata
- Linting: Pengecekan gaya kode dan potensi bug statis
- Security scanning: Deteksi kerentanan di dependencies
Stage 4: Deploy ke Staging
Setelah semua tests lulus, kode di-deploy ke environment staging yang merupakan replika production. Tim QA atau developer bisa melakukan pengujian akhir di sini.
Stage 5: Deploy ke Production
Deploy final ke server production yang diakses pengguna nyata. Tergantung kebijakan tim, ini bisa terjadi otomatis (Continuous Deployment) atau menunggu approval manual (Continuous Delivery).

Implementasi CI/CD Pipeline dengan GitHub Actions
Mari lihat implementasi nyata cara setup CI/CD pipeline untuk berbagai stack populer.
Pipeline CI/CD untuk Website PHP Murni
# .github/workflows/cicd-php.yml
name: CI/CD Pipeline - PHP
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
# Stage 1: Testing
lint-and-test:
name: Lint dan Test PHP
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup PHP 8.3
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
tools: php-cs-fixer, phpstan
- name: Cek code style (PHP CS Fixer)
run: php-cs-fixer fix --dry-run --diff
- name: Static analysis (PHPStan)
run: phpstan analyse src --level=5
# Stage 2: Deploy ke Staging (hanya dari branch develop)
deploy-staging:
name: Deploy ke Staging
needs: lint-and-test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/develop'
environment: staging
steps:
- uses: actions/checkout@v4
- name: Deploy staging via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.STAGING_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd ~/staging.domain.com
git pull origin develop
echo "Staging updated: $(date)"
# Stage 3: Deploy ke Production (hanya dari branch main)
deploy-production:
name: Deploy ke Production
needs: lint-and-test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
environment: production
steps:
- uses: actions/checkout@v4
- name: Deploy production via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.PROD_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd ~/public_html
git pull origin main
echo "Production deployed: $(date)"
Pipeline CI/CD Lengkap untuk Laravel
# .github/workflows/cicd-laravel.yml
name: CI/CD Pipeline - Laravel
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
ci:
name: Continuous Integration
runs-on: ubuntu-latest
services:
# Jalankan MySQL untuk integration tests
mysql:
image: mysql:8.0
env:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: testing
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
extensions: pdo_mysql, mbstring, bcmath
coverage: xdebug
- name: Cache Composer dependencies
uses: actions/cache@v4
with:
path: vendor
key: composer-${{ hashFiles('composer.lock') }}
- name: Install Composer dependencies
run: composer install --prefer-dist --no-progress
- name: Setup environment untuk testing
run: |
cp .env.testing .env
php artisan key:generate
- name: Jalankan database migrations
run: php artisan migrate --force
- name: Jalankan semua tests dengan coverage
run: php artisan test --coverage --min=70
- name: Jalankan linting
run: ./vendor/bin/pint --test
cd:
name: Continuous Deployment
needs: ci
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
environment: production
steps:
- uses: actions/checkout@v4
- name: Deploy ke Production Server
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.PROD_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd ${{ secrets.APP_PATH }}
git pull origin main
# Masuk ke maintenance mode selama deploy
php artisan down --refresh=15 --secret="bypass-token-rahasia"
# Update dependencies
composer install --no-dev --optimize-autoloader
# Jalankan migrasi database
php artisan migrate --force
# Clear dan rebuild cache
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
# Restart queue workers
php artisan queue:restart
# Kembali online
php artisan up
echo "Deploy Laravel berhasil: $(date)"
Pipeline CI/CD untuk Next.js dengan Environment Variables
# .github/workflows/cicd-nextjs.yml
name: CI/CD Pipeline - Next.js
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
ci:
name: Build dan Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Jalankan linting
run: npm run lint
- name: Jalankan type checking
run: npm run type-check
- name: Jalankan unit tests
run: npm test -- --coverage
- name: Build aplikasi
run: npm run build
env:
NEXT_PUBLIC_API_URL: ${{ secrets.NEXT_PUBLIC_API_URL }}
NEXT_PUBLIC_SITE_URL: ${{ secrets.NEXT_PUBLIC_SITE_URL }}
cd:
name: Deploy ke Production
needs: ci
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- name: Build untuk production
run: npm run build
env:
NEXT_PUBLIC_API_URL: ${{ secrets.NEXT_PUBLIC_API_URL }}
- name: Upload ke server dan restart
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.PROD_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd ${{ secrets.APP_PATH }}
git pull origin main
npm ci --production
npm run build
pm2 restart nextjs-production --update-env
Cara Setup Environment dan Approval di GitHub
GitHub mendukung Environments - fitur yang memungkinkan Anda mengkonfigurasi aturan proteksi untuk deployment, termasuk requirement approval manual sebelum deploy ke production:
- Di repositori GitHub, masuk ke Settings → Environments
- Klik New environment dan buat environment bernama
production - Centang Required reviewers dan tambahkan nama reviewer
- Setiap workflow yang men-deploy ke environment
productionakan menunggu approval sebelum berjalan - Reviewer mendapat notifikasi email dan bisa approve atau reject deployment dari GitHub
staging environment memiliki DB_PASSWORD yang berbeda dari production. Ini lebih aman daripada menyimpan semua secrets di level repositori.
Monitoring Pipeline dan Notifikasi
Pipeline yang baik tidak hanya mengotomasi deploy - ia juga memberi visibilitas penuh kepada tim:
Badge Status di README
Tambahkan badge status pipeline ke README repositori untuk visibilitas cepat:

Notifikasi ke Slack
- name: Notifikasi ke Slack
if: always() # Selalu jalankan, baik sukses maupun gagal
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_COLOR: ${{ job.status }}
SLACK_TITLE: "Deploy ${{ job.status == 'success' && 'Berhasil' || 'GAGAL' }}"
SLACK_MESSAGE: "Commit: ${{ github.event.head_commit.message }} | By: ${{ github.actor }}"
Checklist CI/CD Pipeline yang Siap Production
- Pipeline terpicu otomatis saat push atau pull request
- Stage build memverifikasi kode bisa di-compile/build tanpa error
- Unit tests dan integration tests dijalankan di setiap pipeline run
- Deploy ke staging terjadi otomatis dari branch develop
- Deploy ke production membutuhkan CI lulus dari branch main
- Semua kredensial disimpan di Secrets, tidak ada hardcoded di YAML
- Notifikasi dikirim ke tim saat deploy berhasil atau gagal
- Log deployment tersimpan dan bisa diakses untuk audit
- Ada mekanisme rollback yang jelas dan terdokumentasi
- Pipeline diuji dan terbukti bisa recovery dari kegagalan
FAQ: Cara Setup CI/CD Pipeline
Kesimpulan: CI/CD Pipeline adalah Investasi Jangka Panjang
Cara setup CI/CD pipeline memang membutuhkan waktu dan usaha di awal, namun ini adalah investasi yang memberikan return sangat besar. Setiap kali Anda push kode tanpa perlu khawatir tentang proses deploy, setiap kali bug terdeteksi sebelum sampai ke pengguna, dan setiap kali rollback bisa dilakukan dalam hitungan menit - semua itu adalah hasil dari pipeline yang Anda setup hari ini.
Mulailah dengan pipeline sederhana: trigger saat push ke main, jalankan beberapa test, deploy via SSH ke server. Tambahkan kompleksitas secara bertahap seiring tim dan proyek berkembang. Yang paling penting adalah mulai - karena pipeline yang berjalan sederhana jauh lebih baik dari pipeline sempurna yang tidak pernah jadi.
Fondasi CI/CD yang baik dimulai dari server yang andal dan mendukung SSH access. HostingEkspres menyediakan hosting dan VPS dengan SSH access, uptime tinggi, dan support teknis dalam Bahasa Indonesia - semua yang Anda butuhkan untuk menjalankan pipeline CI/CD dengan percaya diri.
Server Siap untuk CI/CD Pipeline Anda!
SSH Access, Git, PHP, Node.js, MySQL. Support penuh untuk automation deployment - mulai Rp 15.000/bulan.
Lihat Paket HostingArtikel Terkait
GitHub Actions untuk Deploy Otomatis: Panduan CI/CD Lengkap 2026
Panduan lengkap GitHub Actions untuk deploy otomatis website ke server. Pelajari cara membuat CI/CD pipeline dari nol - mulai dari workflow YAML, secrets, hingga auto-deploy ke hosting dan VPS untuk developer Indonesia.
Baca Selengkapnya →Git untuk Pemula: Panduan Lengkap Version Control 2026
Panduan lengkap Git untuk pemula dalam Bahasa Indonesia. Pelajari apa itu Git, cara install, perintah dasar, branching, merge, dan cara menggunakan GitHub - semua yang dibutuhkan developer Indonesia untuk mulai menguasai version control.
Baca Selengkapnya →Cara Deploy Website ke Server: Panduan Lengkap 3 Metode 2026
Panduan lengkap cara deploy website ke server dengan 3 metode: FTP, Git, dan cPanel File Manager. Cocok untuk website statis, PHP, WordPress, hingga aplikasi Node.js dan Laravel di hosting maupun VPS.
Baca Selengkapnya →Butuh Hosting untuk Website Anda?
Dapatkan hosting cepat, aman, dan terpercaya dengan harga terjangkau. Gratis domain, SSL, dan support 24/7.
Jangan Ketinggalan Promo!
Subscribe newsletter kami dan dapatkan diskon hingga 50% untuk pembelian pertama kamu.
Gratis, tanpa spam. Bisa unsubscribe kapan saja.