GitforDeploy

Git For Deploy
By: Muhamad Angga Ferdyan



Sebelum melakukan deployment project ke Ubuntu Server, langkah pertama yang perlu dilakukan adalah menyiapkan beberapa Virtual Machine (VM). Berikut adalah daftar VM yang harus diinstal:

1. Menginstal Virtual Machine

Kalian dapat menggunakan Virtual Machine seperti VirtualBox atau VMware untuk mengelola berbagai VM yang dibutuhkan. Software ini dapat diunduh langsung dari situs resmi masing-masing platform:

Setelah menginstal salah satu dari software tersebut, Kalian dapat mulai membuat VM untuk kebutuhan deployment.

2. Menginstal Kali Linux

Dalam persiapan ini, Kalian perlu menginstal dua VM dengan Kali Linux, masing-masing memiliki peran yang berbeda:

a. Kali Linux untuk GitLab

VM pertama dengan Kali Linux digunakan untuk menginstal dan menjalankan GitLab, yang berfungsi sebagai repository manajemen kode sumber dan CI/CD pipeline.

b. Kali Linux untuk Jenkins

VM kedua dengan Kali Linux digunakan untuk menginstal Jenkins, sebuah automation server yang membantu dalam proses deployment aplikasi ke server.

3. Menginstal Ubuntu Server

VM terakhir yang perlu diinstal adalah Ubuntu Server, yang akan digunakan sebagai target utama deployment project. Pastikan server ini sudah siap untuk menerima deployment dari Jenkins dan dapat diakses melalui jaringan lokal.



catatan: agar VM saling terhubung satu sama lain gunakan setting network brigde adapter 

4. Menginstal GitLab di Kali Linux (Debian Based)

GitLab adalah platform DevOps lengkap untuk repositori Git dan CI/CD pipeline. Berikut adalah langkah-langkah instalasi GitLab di Kali Linux:

a. Update Sistem

Jalankan perintah berikut untuk memastikan sistem Kalian dalam kondisi terbaru:

sudo apt update && sudo apt upgrade -y

b. Instal Dependensi yang Dibutuhkan

GitLab memerlukan beberapa paket dependensi untuk berjalan dengan baik:

sudo apt install -y curl openssh-server ca-certificates tzdata perl

c. Tambahkan Repository GitLab

Jalankan perintah berikut untuk menambahkan repository resmi GitLab:

curl -fsSL https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

d. Instal GitLab Community Edition

Gunakan perintah berikut untuk menginstal GitLab:

sudo apt install gitlab-ce -y

e. Konfigurasi GitLab

Buka file konfigurasi utama GitLab dengan editor teks:

sudo nano /etc/gitlab/gitlab.rb

Cari baris berikut:

gitlab_rails['external_url'] = 'http://<IP-Server>'

Ganti dengan domain yang diinginkan, misalnya:

gitlab_rails['external_url'] = 'http://<IP-COMPUTER>:<PORT>'

Simpan file dengan CTRL + X, lalu tekan Y dan Enter.

Setelah instalasi selesai, konfigurasikan GitLab dengan perintah:

sudo gitlab-ctl reconfigure

Tunggu hingga proses konfigurasi selesai.

f. Akses GitLab

Buka browser dan akses GitLab melalui alamat:

http://<IP-Server>:<PORT>

Gantilah <IP-Server> dengan alamat IP VM Kali Linux Anda.

Login pertama kali menggunakan username root dan password yang dapat ditemukan dengan perintah:

Misalkan ada Error pada proses installasi, periksa dan BACALAH erorr-nya dan tanyakan ke CHATGPT  atau mungkin dari dependency nya yang harus di cek, soalnya biasanya ada yang hilang.


5. Menginstal Docker di Kali Linux

Sebelum menginstal Jenkins, kita perlu menginstal Docker terlebih dahulu agar Jenkins dapat berjalan dalam container. Berikut langkah-langkah instalasi Docker di Kali Linux menggunakan paket docker.io dari repository resmi Debian:

a. Update Sistem

sudo apt update && sudo apt upgrade -y

b. Instal Docker

sudo apt install -y docker.io

c. Tambahkan Pengguna ke Grup Docker

sudo usermod -aG docker $USER

Keluar dan masuk kembali ke sesi terminal agar perubahan grup diterapkan.

d. Verifikasi Instalasi

docker --version

Jika Docker berhasil diinstal, Kalian akan melihat versi Docker yang terpasang.


6. Menginstal Jenkins dengan Docker di Kali Linux

Setelah Docker terpasang, kita dapat menjalankan Jenkins dalam container. Berikut langkah-langkahnya:

a. Tarik Image Jenkins dari Docker Hub

sudo docker pull jenkins/jenkins:lts

b. Jalankan Container Jenkins

sudo docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts

c. Akses Jenkins

Buka browser dan akses Jenkins melalui alamat:

http://<IP-Server>:8080

Gantilah <IP-Server> dengan alamat IP VM Kali Linux kalian.

Untuk mendapatkan password awal Jenkins, jalankan perintah berikut:

sudo docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

Gunakan password ini untuk login pertama kali dan selesaikan setup awal Jenkins.


Setelah Jenkins berhasil diinstal menggunakan Docker, langkah berikutnya adalah mengintegrasikannya dengan GitLab dan Ubuntu Server agar pipeline deployment berjalan otomatis. Nantikan pembahasan selanjutnya!

Proses Deployment

  1. Buatlah folder atau direktori didalam vm kali linux yang kalian gunakan untuk menginstal Gitlab dengan menggunakan perintah sudo mkdir <direktori>                                                                                                      
  2. Setelah itu masuk kedalam direktori yang sudah dibuat dan lakukan clone repository sebagai contoh project yang akan dideploy menggunakan perintah sudo git clone <repository>

  3. kemudian lakukan konfigurasi git agar kalian dapat melakukan remote ke repository anda tapi sebelumnya anda harus membuat repository di gitlab yang sudah anda install sebelumnya.
    • akses gitlab kalian dengan alamat ip atau domain yang sudah anda set
                kemudian login dengan credential yang kalian miliki
    • dan buat repository baru 


    • Jika sudah kita bisa kembali ke terminal di kali linux untuk melakukan konfigurasi git

  4.  Nah tadi kan kita sudah melakukan cloning repository sebelumnya milik indrasatya pada repo aplikasi-antrian-berbasis-web. pada set default-nya setiap repository yang di cloning sudah terdapat remote user yang memiliki repo tersebut. disini kita akan menghapus remote dari user sebelumnya dengan perintah git remote remove origin 

  5. dan gunakan perintah git remote add origin <repository milik kita yang sudah dibuat>  untuk menambahkan remote user kalian, remote user ini merupakan remote user yang kalian gunakan untuk membuat repository gitlab kalian                                                                                                                                                                                               
  6. jika berhasil lakukan push repository. tujuannya untuk meng-upload repository yang dicloning kedalam repository yang sudah kita buat.              misal terdapat eror seperti ini saat push 
    coba periksa branch mana yang sedang digunakan terlebih dahulu, dengan perintah git branch         
    dari situ terlihat bahwa kita sedang berada pada branch master yang mana itu yang menyebabkan error karena kita ingin melakukan push dengan branch main, jadi kita bisa berpindah branch terlebih dahulu atau jika kalian ingin menguploadnya pada branch master juga tidak masalah nanti tinggal di merge. untuk berpindah branch kita bisa menggunakan perintah                
    git branch -M <branch_yang_dituju>  
                                          kemudian lakukan push lagi 
  7. jika sudah berhasil coba cek repository gitlab apakah sudah masuk, jika sudah masuk akan muncul project hasil cloningan tadi. 

  8. untuk setup gitlab sudah selesai, sekarang kita menuju langkah selanjutnya yaitu konfigurasi Jenkins. akses jenkins terlebih dahulu dan login menggunakan credential yang sudah dibuat.                                         

  9. buat repository atau project di jenkins tapi sebelum itu lebih baik untuk menginstal plugin yang dibutuhkan seperti plugin gitlab dan juga ssh agent, mungkin bisa ditambah plugin pipeline stage view untuk melihat progres deployment saat berjalan. 

  10. pada konfigurasi pipeline kita bisa gunakan pipeline sederhana dulu sebagai testing 

  11. jika kedua platform sudah dikonfigurasi masing-masing, kita tinggal integrasikan keduanya agar saling terhubung
  12. sekarang kembali ke repository gitlab dan pergi ke setting, disitu ada menu webhook. masuk ke webhook 

    dan lakukan konfigurasi seperti ini. dan centang bagian yang dibutuhkan
    url itu didapat dari repository atau project jenkins yang sudah dibuat. kemudian screet token ambil dari access token yang sudah digenerate dari jenkins 

      
    jangan  lupa untuk uncheck pada bagian ini 
    karena pada url jenkins, saya tidak menggunakan protokol https melainkan http yangmana tidak menggunakan sertifikat SSL

  13. jika sudah coba lakukan push event dari gitlab ke jenkins melalui webhook 

    jika muncul hasil seperti ini, itu artinya kalian harus mengganti job dengan project pada url jenkins yang digunakan pada webhook dari seperti ini http://<ip>:8080/job/aplikasi-antrian-web jadi seperti ini http://<ip>:8080/project/aplikasi-antrian-web   
    catatan: misalkan kalian mendapat url kalian mengalami invalid url  itu artinya ada satu settingan yang terlupakan. yaitu kita lupa untuk men-setting network dan alamat ip yang digunakan untuk outbound request. Kalian bisa pergi ke gitlab -> admin -> setting -> network -> outbound request dan masukan alamat ip gitlab kalian. dan Outbound sendiri  adalah permintaan yang dikirim dari suatu sistem atau aplikasi ke sistem eksternal melalui jaringan. Contohnya dalam DevOps adalah GitLab yang mengirim webhook ke Jenkins atau Jenkins yang mengambil kode dari repository GitLab untuk menjalankan pipeline CI/CD.                                                                                                                                              = sekarang coba lakukan push event lagi, harusnya sudah berhasil. jika berhasil akan menampilkan hasil seperti ini 
    itu artinya gitlab sudah berhasil diintegrasikan dengan jenkins dan kalian juga bisa memeriksa hasilnya berhasil atau tidak dihalaman project jenkins kalian.

  14. Kemudian sekarang yang terakhir adalah melakukan deployment dari jenkins ke ubuntu server.
  • untuk melakukan deploy kalian bisa menuju ke bagian konfigurasi project jenkins kalian 
dan masuk kebagian pipeline.

kalian bisa buat pipeline kalian sendiri atau gunakan pipeline yang saya buat kemudian kalian modifikasi sendiri, tapi sebelum kalian buat pipeline nya kalian harus config credential ubuntu server ke jenkins melalui menu 


untuk private key kalian bisa generate di ubuntu server dengan perintah 

1. Buat Private dan Public Key

Jalankan perintah di terminal Ubuntu Server:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

2. Cek Private dan Public Key

Setelah selesai, akan ada dua file yang dibuat:

  • Private key: ~/.ssh/id_rsa
  • Public key: ~/.ssh/id_rsa.pub

Gunakan perintah berikut untuk melihat private key:

cat ~/.ssh/id_rsa
  • setelah itu selesai kalian bisa kembali lagi ke halaman konfigurasi repository jenkins bagian pipeline dan buat pipeline atau copy paste pipline saya dibawah ini
pipeline {
    agent any

    environment {
        SERVER_USER = 'credential ubuntu server'    // Username server
        SERVER_IP = '192.168.1.7'   // IP server deployment
        APP_DIR = '/var/www/aplikasi-antrian' // Direktori aplikasi di server
        BRANCH = 'main' // Branch Git yang digunakan
        REPO_URL = 'http://192.168.1.19:8081/root/aplikasi-antrian-web.git' // URL Repo Git
    }

    stages {
        stage('Checkout Code') {
            steps {
                git branch: "${BRANCH}", url: "${REPO_URL}"
            }
        }

        stage('Build Application') {
            steps {
                script {
                    sh 'echo "Running build steps (jika ada)"'
                    // Tambahkan perintah build jika diperlukan
                }
            }
        }

        stage('Deploy to Server') {
            steps {
                sshagent(credentials: ['ubuntu']) {
                    sh """
                        ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} <<EOF
                        echo "Starting Deployment..."

                        # Pindah ke /var/www
                        cd /var/www

                        # Jika direktori aplikasi belum ada, buat
                        if [ ! -d "aplikasi-antrian" ]; then
                            echo "📂 Direktori tidak ditemukan, membuat direktori..."
                            sudo mkdir -p aplikasi-antrian
                            sudo chown -R ${SERVER_USER}:${SERVER_USER} aplikasi-antrian
                        fi

                        # Clone repository jika belum ada
                        if [ ! -d "aplikasi-antrian/.git" ]; then
                            echo "🛠 Repository belum ada, melakukan clone..."
                            git clone ${REPO_URL} aplikasi-antrian
                        else
                            echo "🔄 Repository sudah ada, melakukan pull..."
                            cd aplikasi-antrian
                            git reset --hard
                            git pull origin ${BRANCH}
                        fi

                        # Atur izin direktori
                        sudo chmod -R 755 aplikasi-antrian

                        # Restart service web server jika berjalan
                        if systemctl is-active --quiet apache2; then
                            echo "🔄 Restarting Apache..."
                            sudo systemctl restart apache2
                        elif systemctl is-active --quiet nginx; then
                            echo "🔄 Restarting Nginx..."
                            sudo systemctl restart nginx
                        else
                            echo "⚠ Tidak ada web server yang berjalan."
                        fi

                        echo "✅ Deployment successful!"
EOF
                    """
                }
            }
        }
    }

    post {
        success {
            echo '✅ Deployment Berhasil!'
        }
        failure {
            echo '❌ Deployment Gagal! Periksa log untuk detail.'
        }
    }
}

  • jika terdapat error coba periksa log error pada setiap percobaan deploy

  •  Kemudian periksa pada ubuntu server apakah repository gitlab kalian berhasil dideploy 

  • dan coba jalankan project dengan mengakses alamat ip ubuntu server dan gunakan port 80 atau 443 

       dan seleesaaai siuuuuuuuuuuuuuuuu
CATATAN:
jika masih ada error itu tergantung amal dan perbuatan atau coba tanya kepada kerang ajaib 




Komentar

Postingan populer dari blog ini

Git for DevOps

Membuat CryptoCurrency( Mata Uang Kripto) menggunakan python