Continuous Integration and Continuous Deployment
Published: 2022-11-30 15:55:07

## Pendahuluan
CI/CD atau kependekan dari **Continuous Integration dan Continuous Deployment** bermula dari banyaknya kemungkinan kegagalan yang terjadi dalam deployment dengan cara tradisional/manual dimana developer melakukan push ke dalam repo lalu developer lain melakukan pull dan melakukan push ke dalam server untuk dilakukan deploy. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/28sgxqh26v5amga9r2hm.png)

Ide dari CI/CD adalah bagaimana caranya ketika developer melakukan push kedalam repositori, maka source code tersebut akan langsung dilakukan deployment, sehingga tidak perlu melakukan deployment secara manual agar terhindar dari kegagalan. 

Lalu bagaimana cara melakukan CI/CD? CI/CD dapat kita lakukan dengan bantuan alat atau framework seperti Jenkins, Circleci, TeamCity, Bamboo, atau juga GitLab. Pada artikel kali ini, saya akan membahas penggunaan GitLab dalam melakukan CI/CD. GitLab merupakan layanan seperti Github yang menyediakan manajemen project dengan git repositori yang juga memiliki fitur Runner yang merupakan service atau worker yang berfungsi untuk build image, push image atau bahkan melakukan deploy image dimana kita dapat mendefinisikan nya pada file.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aq3nl392fgeyavznbqke.png)

disini akan coba dengan gitlab dengan repository yang kosong

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iar6apz3ltw595ufsuh1.png)

bahwa untuk memindahkan tanggung jawab manual task orang menuju ke gitlab runner atau Gitlab CI-CD maka kita harus mendefinisikan terlebih dahulu task apa yang harus dilakukan, hal tersebut sebenarnya bisa kalian baca terkait dengan gitlab CI pada docs, Apa yang harus dilakukan mulai dari kode itu siap ter-push atau sampai kode itu di deploy

sederhananya, kita bisa dengan melihat beberapa hal dari gitlab CI: 

1. yang pertama kita harus mendefinisikan stagenya, stage apa yang sebenarnya akan kita lakukan contohnya stage pertama dalam melakukan build terhadap sebuah docker image
2. Kemudian stage yang kedua yaitu untuk membuat atau mendeploy docker image

ketika kita melakukan build apa sih yang harus dilakukan untuk build sebuah docker image? kita lanjutkan bab selanjutnya

## pembuatan CD (Continous Delivery)

namun perlu diketahui untuk kita bisa melakukan push terhadap docker register ini kita harus membuat akses token terlebih dahulu karena Runner dari gitlab itu perlu mengautentikasikan dirinya dan mengautorize dirinya bahwa kita bener diperbolehkan untuk melakukan push images pada repositori tersebut, caranya seperti apa?

- klik profile > edit profile

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t03n5ab1zbe2xpd6ie7w.png)

- lanjut klik Access Token lalu isikan data yang tertera

 ![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x8iqcxyq5bavld4odnyd.png)

 dan perlu diperhatikan pada bagian <u>select scopus</u> setting sesuai keinginan, runner itu bisa melakukan apa saja, seperti pada gambar yang saya contohkan di bawah ini

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f5suq8jjmzicw5zjtaic.png)

saya membuat 3 select scopus yaitu:

1. read_repository yang berarti runner bisa membaca repositori.
2. read_registry yang berarti bisa membaca atau mengakses pada private project
3. write_registry yang berarti runner bisa melakukan push images

setelah itu akan mendapatkan token yang dimana token tersebut digunakan untuk autentikasi nantinya maka jangan lupa untuk di save/copy

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mk2cdu36r2jb00w6rrhq.png)

- setelah itu lanjut kedalam repositori yang sudah dibuat tadi setelah itu settings > CI/CD

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4fsd0w3lsnvr5firk3si.png)

- setelah itu kita akan menyimpan value dari token yang sudah di copy tadi ke sebuah variabel

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5w5ntb03ckw2tgh46jx.png)

- Token sudah dibuatkan variabel maka dari sini proses pembuatan CD (Continous Delivery) sudah selesai, karena ini digunakan untuk melakukan push images ke sebuah registry


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wws79f6pn5l1r8n8ozen.png)

### Studi Kasus
kita mulai dengan sebuah studi kasus sederhana, pada gambar dimana kita user/developer itu push html kedalam sebuah repo maka akan dibuatkan image docker yang akan di push kedalam sebuah registry

- pada repo yang sudah dibuat sebelumnya, kita buat file terlebih dahulu dengan klik "web IDE"

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bu1kip0hmmjea0kie8s.png)

- setelah itu buat folder dan file seperti pada gambar berikut:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kfz23vyy1s48jd84sj3v.png)

- mendefinisikan images yang akan di build, dengan cara create file lalu pilih dockerfile

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nk2urgrratdr14mvxzkr.png)

buat deskripsi seperti berikut:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qse1mkrf1wcl2q5dcrpc.png)

- setelah itu buat file baru dengan .gitlab-ci.yml

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ikwp9b59pghhivfyuia0.png)
dan buat deskripsi sebagai berikut:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/05xz3bp4ol41yjkiasjm.png)

- setelah semua sudah selesai lalu lakukan commit, kembali ke repositori awal, ketika pada repositori terdapat icon seperti ini:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5n72n0s4f8tkv7iegau.png)

yang menandakan pipeline sudah running

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w08waet2761d3ggtyyla.png)

- lalu pada bagian gambar dibawah ini digunakan untuk mengetahui proses yang sudah dikerjakan itu sampai mana, tunggu hingga proses selesai.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cpy9746mtzo7fuiwshgi.png)

- jika proses sudah selesai lalu menuju CI/CD > pipeline, maka akan ada keterangan seperti ini, tandanya sudah berjalan

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hkhmux6skhg87nwgf02y.png)

- ketika kita masuk kedalam container registry maka akan ada hasil dari docker build dan docker push nya

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gp27tksaiujtdjjfrz5k.png)

##Continous Deployment
setelah sudah selesai melakukan tahapan sebelumnya kita lanjut pada deploy

- kembali pada file .yml yang sudah dibuat pada repositori, lalu tambahkan pada stages yaitu "deploy", setelah itu definisikan deploy tersebut seperti yang di lingkari, lalu commit

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2a0l897k51kxekkxvva4.png)

- setelah itu pada repositori, menuju menu CI/CD > pipeline, dan akan terlihat status running yang berarti proses sedang berjalan

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xuijhdg0l079rxqdcbah.png)

- pada bagian deploy di klik, dan akan terlihat proses nya seperti pada gambar

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w15wc29we9iu00ihrdc2.png)

ketika awal docker images hanya ada 1 images di server, lalu ketika melakukan pull lagi, docker images menambah 1

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ez40iaxsbkdulen0qm70.png)

maka selesai tutorial dari Continous Integration dan Continous Deployment Docker dengan Gitlab CI/CD