Logo
CI/CD Pipline

Apa itu CI/CD dan Bagaimana Tutorial Cara CI/CD di Github

  • Git
  • Alfin Ardiansyah
  • 22 Aug 2024

CI/.CD merupakan singkatan dari Continous Integration dan Continous Deplyoment. CI/CD menjadi penghubung dari tim operations dalam melakukan integrasi kode pengujian atau testing ke perilisan kode secara otomatis ke server.

Apa Itu CI/CD?

Continuous Integrations  (CI) adalah proses dari penggabungan kode yang sudah dibuat oleh tim developer ke repositori kode/server yang kemudian dijalankan pengujian secara otomatis dan berkelanjutan. Pengujian otomatis pada Continuous Integrations (CI) ini bertujuan agar pemeriksaan dan memastikan kalau software dapat berjalan dengan normal.

Continuous Delivery (CD) merupakan proses lanjutan dari Continuous Integrations(CI) yang mempersiapkan perubahan kode ke deploy staging (pra-produksi) setelah pembuatan kode secara manual. Kode yang sudah masuk pada CD harus lulus dalam pengujian unit otomatis, pengujian integrasi, dan pengujian sistem. Apabila semua pengujian kode lulus dalam tahap staging, selanjutnya akan diteruskan ke proses Deployment.

Fungsi dan Manfaat CI/CD

  • Dengan menggunakan pipeline CI/CD, tim pengembang dapat merilis fitur dan perbaikan dengan cepat dan efisien.
  • Pengujian otomatis pada setiap tahap pipeline memastikan bahwa kode yang diterapkan adalah kode yang telah diverifikasi, mengurangi kemungkinan bug di lingkungan produksi.
  • Pipeline CI/CD memungkinkan pengembang, tester, dan ops untuk bekerja secara terintegrasi, meningkatkan kolaborasi dan efisiensi tim.
  •  Dengan mengotomatisasi tugas-tugas rutin, pipeline CI/CD memberikan lebih banyak waktu kepada tim untuk fokus pada inovasi.

Cara Setting CI/CD di Github dengan FTP

Sebelum melakukan setting CI/CD dengan FTP, pastikan Anda sudah memahami fungsi-fungsi dasar git seperti yang sudah kita pelajari sebelumnya.

  • Buat akun FTP di Server Anda
  • Siapkan Repository di Github dan Clone project ke local komputer
  • Buka repositori github di local komputer dan buat file baru di folder .github/workflows/ftp_deploy.yml
  • Lakukan edit file ftp_deploy.yml seperti berikut sesuai dengan branch dan file yang tidak ingin disertkan. Contoh menggunakan Branch Main :
on:
  push:
    branches:
      - main
name: 🚀 Deploy website on push
jobs:
  web-deploy:
    name: 🧑‍💻 Deploy
    runs-on: ubuntu-latest
    steps:
    - name: 📨 Get latest code
      uses: actions/checkout@v3

    - name: 🗃️ Sync files
      uses: SamKirkland/[email protected]
      with:
        server: ${{ secrets.FTP_HOST }}
        port: ${{ secrets.FTP_PORT }}
        server-dir: ${{ secrets.FTP_DIR }}
        username: ${{ secrets.FTP_USER }}
        password: ${{ secrets.FTP_PASS }}
        exclude: .env*
          - .git*
          - .git*/**
          - media/*
          - assets/uploads/*

Setelah melakukan edit dan menambahkan kode seperti diatas pada file ftp_deploy.yml selanjutnya :

  • Buka repository di Github kemudian pilih SettingsSecrets & VariablesActions.
  • Pilih New Repository Secret. Pada bagian name masukan FTP_HOST dan isikan valuenya  menjadi domain atau alamat IP Server, kemudian simppan.
  • Pilih New Reposiotry Secret. Pada bagian name masukan FTP_DIR dan isikan valuenya menjadi path direktori Anda di Server, kemudian simpan .
  • Pilih New Reposiotry Secret. Pada bagian name, masukan FTP_PASS dan isikan valuenya password FTP Anda di Server, kemudian simpan.
  • Pilih New Reposiotry Secret. Pada bagian name, masukan FTP_USER dan  isikan valuenya username FTP Server Anda, kemudian simpan,
  • Pilih New Reposiotry Secret. Pada bagian name, masukan FTP_PORT dan isikan value FTP_PORT adalah 21, kemudian simpan.
  • Upload file ftp_deploy.yml dari local komputer ke repository server menggunakan perintah git push.
  • Untuk mengecek apakah CI/CD sudah berjalan dengan benar silakan tambahkan file baru di komputer lokal anda kemudian lakukan git push. File tersebut seharusnya akan muncul pada server anda. Jika masih belum berhasil, cek erornya pada menu Actions di github.

Cara Setting CI/CD di Github dengan SSH

Setelah tadi kita membahas CI/CD dengan menggunakan metode FTP, selanjutnya kita akan menggunakan metode SSH.

  • Buat akun SSH di server .
  • Siapkan repository di Github dan clone di komputer lokal anda.
  • Buka repository di komputer lokal kemudian buat file baru di folder .github/workflows/deploy.yml
  • Edit file deploy.yml sebagai berikut dan sesuaikan nama repository dan branch anda. Disini kita akan memakai 2 branch yaitu main dan development.
name: Deploy
on: 
  push:
    branches:
      - main
      - development
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Build main
      if: github.ref == 'refs/heads/main'
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        password: ${{ secrets.PASSWORD }}
        port: ${{ secrets.PORT }}
        script: |
          sudo branch=main /var/repo/nama-repository.git/hooks/post-receive
    - name: Build development
      if: github.ref == 'refs/heads/development'
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        password: ${{ secrets.PASSWORD }}
        port: ${{ secrets.PORT }}
        script: |
          sudo branch=development /var/repo/nama-repository.git/hooks/post-receive
  • Buka repository di Github kemudian pilih Settings Secrets & VariablesActions.
  • Klik New Repository Secret. Pada bagian name masukan HOST kemudian valuenya isikan alamt IP Server, kemudian simpan.
  • Klik New Repository Secret. Pada bagian name, masukan PASSWORD kemudian valuenya isikan password SSH Server, kemudian simpan.
  • Klik New Repository Secret. Pada bagian name masukkan USERNAME kemudian valuenya isikan username SSH server kemudian simpan.
  • Klik New Repository Secret. Pada bagian name masukkan PORT kemudian valuenya isikan port SSH yaitu 22 lalu simpan.
  • Masuk ke server anda menggunakan Putty.

  • Setting SSH key untuk menghubungkan server anda dengan akun Github, anda bisa membuat SSH key baru atau menggunakan SSH key yang sudah ada di folder /root/.ssh/
  • Buka Github kemudian pilih menu Akun SettingsSSH & GPG keyNew SSH Key.
  • Masukkan SSH key dari server kemudian simpan.
  • Kembali ke server anda di Putty.
  • Buka folder pada  /var/repo/ kemudian clone repository anda menggunakan perintah git clone --bare {link-repository}.
  • Masuk ke dalam repository yang sudah di clone dan buka folder /hooks.
  • Edit file post-receive seperti berikut dan sesuaikan dengan nama repository anda. Anda bisa mengunduhnya terlebih dahulu menggunakan FileZilla.
#!/bin/bash
cd /var/repo/nama-repository.git
if [ $branch = main ]
  then 
    git fetch -q origin main:main
    git --work-tree=/var/www/nama-folder-server --git-dir=/var/repo/nama-repository.git checkout main -f
    chown -Rf www-data:www-data /var/www/nama-folder-server
    echo "Success pull main"
elif [ $branch = development ]
  then 
    git fetch -q origin development:development
    git --work-tree=/var/www/nama-folder-server-development --git-dir=/var/repo/nama-repository.git checkout development -f
    chown -Rf www-data:www-data /var/www/nama-folder-server-development
    echo "Success pull development"
fi

Setelah selesai, edit permission atau izin pada file post-receive di server :

  • Owner : Read, Write, Execute
  • Group : Read
  • Public : Read
  • Numeric : 744

Apabila sudah melakukan edit pada permisson pad file post-recive, selanjutnya adalah :

  • Hapus semua file di folder /hooks selain file post-recive
  • buat folder baru di folder /var/www/{nama folder server} sebagai production,
  • buat folder baru di folder /var/www/{nama folder server development} sebagai development,
  • Lakukan upload pada file deploy.yml dari local computer ke repository server
  • Apabila ingin mengecek apakah CI/CD sudah berhasil dan berjalan, tambahkan file baru dari local ke server dengan git push. Jika berhasil, file tersebut akan muncul di server pada folder /var/www/{nama folder server}.