⚠️ Warning
This post is outdated.
Saya tidak tahu apakah ini bisa disebut sebagai Continuous Integration. Hahaha. Flownya seperti gambar diatas. Untuk casenya seperti ini:
Solusinya adalah:
from flask import Flask, request
import subprocess
import os
import json
app = Flask(__name__)
@app.route('/', methods=['POST'])
def blogrefresh():
data = json.loads(request.data)
print "New commit by: {}".format(data['commits'][0]['author']['name'])
script_path = "/home/sumarsono/jekyll_rebuild.sh"
subprocess.call([os.path.expanduser(script_path)])
return "OK"
if __name__ == "__main__":
app.run(host="127.0.0.1", port=5000)
Disitu saya memakai library flask, saya install pakai pip. Kemudian ada bash script yang dieksekusi yaitu jekyll_rebuild.sh, harus dibuat.
nano /home/sumarsono/jekyll_rebuild.sh
Isinya:
#!/bin/bash
source /home/sumarsono/.rvm/scripts/rvm
cd ~/blog/anuan;
git pull origin master;
bundle exec jekyll build;
cp -rf ~/blog/anuan/_site/* /var/www/html/sumarsono/;
Saya tidak mau membuka port 5000 ke public, jadi pakai reserve proxy aja buat ngarahin ke localhost:5000
server {
listen 80;
server_name api.anuan.com;
error_log /var/log/nginx/api/error.log warn;
access_log /var/log/nginx/api/access.log combined;
location /jekyll {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://localhost:5000/;
}
}
Nantinya, setiap akses ke api.anuan.com/jekyll akan di proxy ke localhost:5000. Jangan lupa reload nginx, nginx -s reload dan tambahkan subdomain api di manager dns.
siapkan repo di lokal
mkdir /home/sumarsono/blog
cd /home/sumarsono/blog
git clone git clone git@github.com:unomind/anuan.git
Jalankan program python tadi:
python /home/sumarsono/webhook.py
Konfigurasi webhook di repo github

Kalau kita coba melakukan push ke repo, VPS kita akan menanggapinya kurang lebih seperti ini:
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 4 (delta 3), reused 4 (delta 3), pack-reused 0
Unpacking objects: 100% (4/4), done.
From github.com:unomind/nalakawula.github.io
* branch master -> FETCH_HEAD
Updating 0920d54..73fbf41
Fast-forward
_posts/2019-01-18-pembaruan-otomatis-sertifikat-lets-encrypt-menggunakan-systemd-timer.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Configuration file: /home/sumarsono/blog/anuan/_config.yml
Source: /home/sumarsono/blog/anuan
Destination: /home/sumarsono/blog/anuan/_site
Incremental build: disabled. Enable with --incremental
Generating...
Jekyll Feed: Generating feed for posts
done in 3.059 seconds.
Auto-regeneration: disabled. Use --watch to enable.
127.0.0.1 - - [19/Jan/2019 05:13:53] "POST / HTTP/1.0" 200 -
PR selanjutnya adalah menambahkan secret.