Pada artikel ini kita akan melakukan mirroring repositori github ke git yang lain. Ide ini muncul ketika teman tkjpedia menggunakan repositori yang tidak konsisten di tiap projek yang dia kerjakan. Dia menggunakan github ya, gitlab ya, bitbucket ya, macem macem lah pokoknya. Ini kadang membuat dia lupa kemarin ngerjain projek A ditaruh di repo yang mana.

Alasan lain adalah fitur fitur di tiap repositori tersebut berbeda beda. Ada fitur keren gratis, ada fitur keren berbayar, macem macem lah pokoknya.

Prasyarat

  1. Akun github / gitlab / bitbucket / repo lain yang akan di mirror
  2. Jenkins

Panduan setup jenkins di ubuntu bisa kalian lihat pada halaman artikel berikut:

Langkah selanjutnya kalian perlu menyambungkan jenkins dengan github & repo git yang lain, tkjpedia menggunakan ssh key. Untuk panduan nya bisa kalian lihat pada artikel berikut:

Langkah Langkah mirroring Github menggunakan Jenkins

Setelah prasyarat dan langkah langkah di atas sudah terpenuhi maka kita bisa membuat suatu job di jenkis untuk melakukan mirroring repository atau cloning repository.

Siapkan repositori

Untuk melakukan mirroring tentunya butuh lebih dari satu repository, maka buat terlebih dahulu repository nya jika belum tersedia. Kalo udah ada, lanjut ke langkah selanjutnya.

Tambah job baru

Tentunya untuk mengawali hal ini, kita tambahkan job baru dengan model freestyle

Kemudian tambahkan repository asal, disini tkjpedia menggunakan github untuk repository asal nya. Pasang juga credential yang digunakan agar bisa melakukan cloning. Tentukan juga branch yang digunakan.

Untuk build trigger tkjpedia menggunakan github hook trigger for gitscm polling. Jadi nantinya kita pasang webhook di repository dan ketika ada yang melakukan push ke repository, github akan memberitahu si jenkins kalo ada yang ngepush, maka si jenkins akan terpicu untuk melakukan job tersebut.

Untuk build environment kita aktifkan delete workspace before build starts dan kita tambahkan ssh key, karena ini juga akan dibutuhkan untuk melakukan push ke repository lain.

Kemudian tambahkan build step execute shell karena kita menggunakan jenkins di ubuntu.

Kemudian tambahkan script berikut:

git checkout -b main
ssh-agent bash -c 'ssh-add ${ssh_key}; git push -f git@gitlab.com:man20820/github-sync.git'

Pertama kita checkout ke branch main, ini bisa temen temen sesuaikan menggunakan branch apa. Lalu kita push ke git kedua atau tkjpedia yang menggunakan gitlab. Jangan lupa cantumkan ssh key yang sudah disimpan pada credential. Save job tersebut kemudian coba jalankan dengan menekan tombol build now di navigasi sebelah kiri.

Pada navigasi kiri bawah ada tandai #1 dan klik pada dropdown “console output” untuk melihat proses yang tadi berjalan.

Otomatisasi Sync

Job yang kita buat tadi harus kita klik “build” secara manual agar repositori tersinkron. Tentunya kita tidak menginginkan hal ini. Kita akan membuat hal tersebut dilakukan secara otomatis ketika repository pada github ada yang baru. Di langkah pembuatan job tadi, kita sudah mengaktifkan opsi github hook trigger for gitscm polling. Selanjutnya kita akan menggunakan fitur webhook nya di github.

Formatnya adalah url jenkins kalian dengan path github-webhook. Jika sudah bisa disimpan dan coba push sesuatu ke repo github kalian, seharusnya jenkins akan terpicu secara otomatis untuk melakukan mirroring ke gitlab.

Percobaan

Push ke github

Cek jenkins job: build 2 sukses

Cek repositori gitlab, sudah tersinkron gaess..