Docker for DevOps engineer 2 minute read

Hai semuanya, di materi study kasus kali ini kita akan membahas Build pipeline untuk Java Web menggunakan Gitlab CI, source-code yang kita gunakan berdasarkan study kasus sebelumnya yaitu seperti berikut:

Pipeline yang kita buat diantaranya:

  1. Build docker image using maven-dockerfile-plugin
  2. Push to docker registry
  3. Add proxy / local caching from maven registry using Nexus OSS

Ok langusung aja kita buat file .gitlab-ci.yml seperti berikut:

Setelah itu, kita buat repository baru di Gitlab dan kemudian push source-code kita ke sana. maka hasilnya seperti berikut:

source-code

Sebelum kita deploy, kita buat variable dulu di CI/CD di level Project / Group

name: M2_PROXY, type: file, protected: no value:

<?xml version="1.0" encoding="UTF-8"?>
<settings>
   <servers>
      <server>
         <id>192.168.88.9:8086</id>
         <username>admin</username>
         <password>default_password</password>
      </server>
      <server>
         <id>192.168.88.9:8087</id>
         <username>admin</username>
         <password>default_password</password>
      </server>
   </servers>
</settings>

Seperti berikut:

m2-proxy-variables

Kemudian, kita buat git tag bisa melalui command line atau pun gitlab seperti berikut:

git tag -a <tag-version> -m "your-tag-message"

git push origin main --tags

Jika dijalankan maka hasilnya seperti berikut:

 docker git:(main) git tag -a 2021.11.27.17.23-release -m "first build javaweb using gitlab ci"

 docker git:(main) git push -u demo main --tags
info: detecting host provider for 'http://192.168.88.10/'...
Enumerating objects: 48, done.
Counting objects: 100% (48/48), done.
Delta compression using up to 16 threads
Compressing objects: 100% (34/34), done.
Writing objects: 100% (45/45), 6.79 KiB | 3.39 MiB/s, done.
Total 45 (delta 15), reused 23 (delta 7), pack-reused 0
To http://192.168.88.10/root/udemy-javaweb.git
 * [new tag]         2021.11.27.17.23-release -> 2021.11.27.17.23-release
Branch 'main' set up to track remote branch 'main' from 'demo'.

Pada pipeline di tersebut agak sedikit berbeda dengan sebelum-sebelumnya. Jadi disini kita menggunakan docker image maven:maven:3.6.3-jdk-11 untuk melakukan build docker image dan service docker:18.09-dind

Nah sekarang kita bisa check pada pipeline, jika sukses maka hasilnya seperti berikut:

pipeline-success

Add caching from maven registry using Nexus OSS

Selanjutnya kita akan bahas untuk mempercepat proses build di maven, jika temen-temen perhatikan dalam hasil build sebelumnya membutuhkan waktu lebih dari 5 menit dalam mendownload dependency dan plugin dari maven repository. Kita sudah menggunakan local caching gitlab tpi akan lebih cepet lagi menggunakan proxy repository maven dengan bantuan Nexus OSS.

Ok langusung ja, update configurasi variable untuk M2_PROXY seperti berikut:

Sekarang kita coba build ulang, dengan klik button retry kita liat first run seperti berikut:

cache-first-run

Sekarang kita coba lagi untuk second run, semoga terlihat perbedaannya seperti berikut hasilnya:

cache-2nd-run

Nah sekarang terlihat ya perbedaanya dari 1 menit lebih ke 5 detik build timenya.