Setup environment for CI using Gitlab & Nexus OSS
Hai semuanya, di materi study kasus kali ini kita akan membahas tentang Setup environment for Continues Integration (CI) menggunakan Gitlab CI dan Nexus OSS. Ok karena artikel ini akan lumayan panjang jadi kita akan bagi2 menjadi beberapa bagian yaitu
- Introduction
- Arsitektur untuk Infra & Software yang digunakan
- Setup & Konfigurasi software
- Testing Gitlab CI script
Ok langsung ja kita ke pembahasan pertama yaitu
Introduction
Seperti yang saya mention sebelumnya bahwa Docker ini bisa digunakan di berbagai lingkungan contohnya Development, CI/CD, Testing, bahkan Production.
Nah sebagai DevOps kita biasanya akan melakukan workflow
(Develop
-> Build
-> Test
-> Deploy
) secara berulang-ulang dan terkadang masih harus dilakukan secara manual, Ini akan menyita waktu dan tenaga. Akan lebih mudah jika buatkan Automated / simplyfied workflow jika kita gambarkan seperti berikut sebagai best practicenya:
Ada 2 phase yaitu Inner loop dan Outer loop,
Inner loop yaitu prosesnya ( Code
-> Build
-> Run
-> Test
) workflow ini biasanya digunakan untuk intensive development.
Sedangkan untuk Outer loop yaitu prosesnya ( Push changes
-> CI build
-> CI test
-> Deploy
) workflow ini biasanya dimana ketika development selesai atau kita mau deploy ke server testing, staging atau production
Arsitektur Infra & Software
Untuk arsitektur untuk infrastructur dan Software yang kita gunakan seperti berikut:
Untuk minimum specification:
vcs_repository:
os: Linux Distro
distro: Ubuntu Server
vesion: '>= 20.04'
hardware:
cpu: 2 CPU
memory: 4GB
storage: 250GB
partitions:
- name: /
size: 75 GB
- name: /var
size: '>= 150GB'
type: LVM
networks:
- name: private ip
ip4: 192.168.88.10/24
gateway: 192.168.88.1
dns:
- 8.8.8.8
- 8.8.4.4
firewall-cmd:
- name: SSH
port: 22/tcp
policy: allow
- name: Gitlab Repository
port: 80/tcp, 443/tcp
policy: allow
packages:
- gitlab-ce
- OpenSSH-Server
docker_registry:
os: Linux Distro
distro: CentOS
vesion: '>= 7.9'
hardware:
cpu: 2 CPU
memory: 4GB
storage: 150GB
partitions:
- name: /
size: 70 GB
- name: /var
size: '>= 120GB'
type: LVM
networks:
- name: private ip
ip4: 192.168.88.9/24
gateway: 192.168.88.1
dns:
- 8.8.8.8
- 8.8.4.4
firewall-cmd:
- name: SSH
port: 22/tcp
policy: allow
- name: Nexus OSS
port: 8081/tcp
policy: allow
- name: Docker registry
port: 8086/tcp, 8087/tcp
policy: allow
packages:
- OpenSSH-Server
- 'oracle-jdk:8'
- 'nexus-oss'
workers:
os: Linux Distro
distro: CentOS
vesion: '>= 7.9'
hardware:
## sesuaikan specifikasi hardwarenya dengan kebutuhan build
## karena ada beberapa bahasa pemograman membutuhkan lebih dari 4GB RAM dan jumlah cpu
cpu: 2 CPU
memory: 4GB
storage: 50GB
partitions:
- name: /
size: 20 GB
- name: /var
size: '>= 30GB'
type: LVM
networks:
- name: private ip
ip4: 192.168.88.8/24
gateway: 192.168.88.1
dns:
- 8.8.8.8
- 8.8.4.4
packages:
- OpenSSH-Server
- docker-ce
- gitlab-runner
Setup & Konfigurasi software
Setelah kita bahas architecturenya jadi langsung aja kita lakukan installasi semua software/component yang kita butuhkan sesuai dengan masing-masing host/vm/server tersebut.
- Basic configuration, pertama yang perlu kita lakukan adalah base configuration diantaranya
- Update latest version dari operation system itu sendiri
- Set selinux/appArmor disable or permissive
- Install gitlab self hosted, untuk menginstall gitlab pada vm/server on premise kita bisa ikuti tutorial dari official website gitlab seperti berikut
- Install docker Linux, Untuk install docker di server pada dasarnya sama dengan artikel sebelumnya ya, baca disini
- Install gitlab-runner, untuk menginstall gitlab-runner pada vm/server on premise kita bisa ikutin tutorial dari official website gitlab seperti berikut
- Install Sonatype nexus-oss, untuk menginstall nexus-oss kita juga udah pernah bahas di artikel sebelumnya, baca disini
Setelah semua component selesai kita install, sekarang kita configurasi untuk gitlab & gitlab-runner menggunakan docker executor. Jadi untuk me-register gitlab runner dalam gitlab kita perlu pilih scopenya yaitu
- Registered as Global
- Registered by group
- Registered by project
Pilih yang mana? ini tergantung dari kebutuhan ada yang ingin semua project pake gitlab runner brati kita register sebagai Global (Menu Admin -> Runners
), ada yang per project (Menu Your project -> Settings -> CI/CD -> Runners
) jadi kita pilih by project. Karena disini saya mau general kita pilih yang Global. yang kita perlukan adalah URL
dan Registration token
seperti berikut:
Sekarang kita register, gitlab runner agent ke gitlab dengan menggunakan perintah berikut:
Jika sudah, maka hasilnya seperti berikut:
Testing Gitlab CI script
Setelah semua software/component tersebut terinstall dan terkonfigurasi dengan benar, sekarang kita lakukan test untuk membuat repository dan menggunakan feature gitlab ci.
- Buat repository git di gitlab yang telah kita install
- Buat file
.gitlab-ci.yaml
seperti berikut - Setelah itu commit & push
- Kemudian kita check pipeline maka hasilnya seperti berikut
Dan jika kita mau lihat jobnya, kita bisa click button pada column stage
. maka seperti berikut tampilannya
Dan yang terakhir kalo kita mau lihat lebih detailnya lagi. kita klik pada button script
maka hasilnya seperti berikut:
Yuk simak juga videonya,
Dan jika temen-temen belajar hal baru kali ini jangan lupa buat Like, Subcribe, dan Share ke temen kalian. Terimakasih!!!