Fakultas Ilmu Komputer UI

Commit 4440d24b authored by Fata Nugraha's avatar Fata Nugraha
Browse files

Add post about automation

parent 08dfb906
Pipeline #9903 passed with stage
in 3 minutes and 10 seconds
---
layout: post
title: GitlabCI + Portainer
date: 2019-03-21 01:44:07 +0700
author: fata
---
Semua bermula pada saat saya tidak dapat menemukan webhook yang didemonstrasikan
oleh pembicara tamu (Kurnia D Win) untuk mengupdate containernya dan semakin hari
jumlah service saya semakin banyak.
<!--more-->
![](/assets/images/2019-03-21-portainer-deployer/services.png)
_Gambar 1: daftar service per 3 Maret 2019_
Sebelumnya saya melakukan deployment dengan portainer secara manual, namun
semakin banyaknya service yang harus saya deploy, saya memulai untuk menggunakan
docker-compose yang di support oleh portainer yang memudahkan proses
_docker orchestration_ saya.
Fitur ini cukup memudahkan saya dalam membuat banyak container sekaligus, namun
kurang bagusnya UX pada fitur ini khususnya dalam menambahkan environment
variables, membuat proses ini selain melelahkan juga membosankan. saya memiliki
13 variabel yang harus ditambahkan, dengan menggunakan form portainer saya perlu
melakukan 26 copy paste antara form dan text editor (atau selama ini ada cara
yang lebih mudah, let me know!).
![](/assets/images/2019-03-21-portainer-deployer/portainer-ux.png)
_Gambar 2: Form untuk menambahkan environment variable._
Pertama saya mencoba untuk membuat script dengan mencapture request dari browser
dan menexportnya dalam format curl.
Sebenarnya masalah sudah selesai, namun tiba-tiba saya ingat rencana saya di post
sebelumnya untuk mengintegrasikan ini kedalam GitlabCI. Permasalahan baru muncul,
karena untuk mengakses API Portainer diperlukan kredensial SSO saya yang cukup
sensitif untuk disimpan di platform gitlab.cs.ui.ac.id.
![](/assets/images/2019-03-21-portainer-deployer/meme.jpeg)
Dan akhirnya saya membuat suatu webservice yang cukup simpel untuk mendeploy
stack kami melalui API Portainer. Webservice ini kemudian saya deploy di vps
pribadi sehingga GitlabCI cukup memanggil api webservice ini.
pengoprasian webservice ini cukup mudah, pertama tambahkan stack di dashboard
![](/assets/images/2019-03-21-portainer-deployer/step-1.png)
kemudian isi environment variable dan stack file, lalu save
![](/assets/images/2019-03-21-portainer-deployer/step-2.png)
buat token baru (token ini cukup sensitif, sehingga sebaiknya disimpan di
CI/CD environment variable)
![](/assets/images/2019-03-21-portainer-deployer/step-3.png)
![](/assets/images/2019-03-21-portainer-deployer/step-4.png)
![](/assets/images/2019-03-21-portainer-deployer/step-5.png)
Lalu tambahkan stage baru di pipeline
```
land:development:
stage: release
image: alpine:3.9
script:
- apk add curl
- 'curl "https://stack.nugraha.xyz/api/deploy-stack/simlomankejapdevelopment/" -H "Authorization: Token $DEPLOYER_TOKEN" --data "stack_file=$(cat docker-compose.yml)"'
only:
refs:
- development
```
![](/assets/images/2019-03-21-portainer-deployer/pipeline.png)
disclaimer: masih dalam versi alpha (entah sampai kapan, hehe pull request dong) so, use at your own risk!
kode sumber webservice dapat ditemukan di: [github/fatanugraha/portainer-stack-deployer](https://github.com/fatanugraha/portainer-stack-deployer)
¯\\\_(ツ)\_
Terima Kasih
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment