Jika anda menggunakan GitLab Continuous Integration (CI/CD) untuk mem-build, test sampai dengan deployment, maka di dalam proses tersebut, mungkin anda perlu menambahkan file tertentu yang sifatnya rahasia sehingga tidak di track di Git. Contoh file tersebut adalah file .env pada project yang menggunakan Laravel. Lalu bagaimana caranya menambahkan file tertentu (contoh: .env) di antara proses GitLab CI secara otomatis, sedangkan GitLab sendiri sampai tulisan ini saya tulis belum support penambahan file ini ? Solusinya adalah dengan menggunakan Environment Variable dan base64.
Encode isi file dengan base64
Misalkan file yang ingin anda tambahkan adalah file .env. Pertama silahkan buat dan tentukan isi file tersebut, lalu encode dengan menggunakan base64.
cat .env | base64
Contoh I=isi file .env
APP_ENV=development
DB_CONNECTION=postgres
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=zona
DB_USERNAME=postgres
DB_PASSWORD=123456
DB_DIALECT=postgres
DB_POLL_MAX=10
DB_POLL_MIN=0
Hasil encode base64 kurang lebih seperti di bawah ini
QVBQX0VOVj1kZXZlbG9wbWVudA0KDQpEQl9DT05ORUNUSU9OPXBvc3RncmVzDQpEQl9IT1NUPTEy
Ny4wLjAuMQ0KREJfUE9SVD01NDMyDQpEQl9EQVRBQkFTRT16b25hDQpEQl9VU0VSTkFNRT1wb3N0
Z3Jlcw0KREJfUEFTU1dPUkQ9MTIzNDU2DQpEQl9ESUFMRUNUPXBvc3RncmVzDQpEQl9QT0xMX01B
WD0xMA0KREJfUE9MTF9NSU49MA==
Silahkan copy/salin hasil base64 seperti di atas.
Hasil encode base64 |
Tambahkan Environment Variable di GitLab CI
Selanjutnya, silahkan tambahkan Environment Variable/Secret Variable ke dalam GitLab CI, lalu isi value-nya dengan hasil base64 di atas. Misalkan nama variable tersebut adalah FILE_ENV.Menambahkan Environment Variable di GitLab CI |
Modifikasi file .gitlab-ci.yml untuk membuat file
Langkah selanjutnya adalah mengubah script file .gitlab-ci.yml agar dapat membuat file, dalam contoh ini adalah file .env, dari environment variable tertentu. Intinya adalah membaca environment variable, dalam contoh ini adalah FILE_ENV, kemudian di-decode dengan base64, lalu hasilnya dimasukkan ke dalam file tertentu.
echo ${nama_key_variable} | base64 -di > nama_file_tujuan
Keterangan :
- nama_key_variable : nama environment variable/key yang anda buat, contoh : FILE_ENV
- base64 -di : mendecode string/file yang sebelumnya di encode dengan base64. Dalam beberapa kasus, anda mungkin tidak meperlukan argumen i, akan tetapi untuk kasus saya, argumen i ini harus ada karena jika tidak maka proses decode akan gagal.
- > : kurang lebih artinya adalah meredirect hasil decode base64 ke dalam file tertentu. Gunakan > jika anda ingin agar file tersebut dibuat baru/override. Atau gunakan >> jika anda ingin agar hasil decode ditambahkan ke dalam file yang sudah ada (tidak override)
- nama_file_tujuan : ini adalah nama file yang anda inginkan. Pada contoh di atas adalah file .env
Contoh :
echo ${FILE_ENV} | base64 -di > .env
Berikut ini adalah contoh file .gitlab-ci.yml
stages:
- deploy
Build and Deploy:
stage: deploy
script:
- echo ${FILE_ENV} | base64 -di > .env
- yarn install
- rsync -avz . fulan@192.168.50.45:/var/www/myprogram/server/
- ssh fulan@192.168.50.45 -C "pm2 restart all"
only:
- master
Di bawah ini adalah contoh hasil running GitLab CI
GitLab CI |
Sekian, selamat mencoba dan semoga yang sedikit ini bermanfaat.