- Ini adalah konfigurasi CI sederhana yang menambahkan hook
post-receiveke repositori bare Git di server pribadi untuk mengotomatiskan pengujian, build, dan pemindahan file - Dibanding CI yang ada, yang memiliki konfigurasi YAML rumit, eksekusi lambat, dan self-hosting yang sulit, kebutuhan seperti isolasi build penuh atau pengelolaan informasi rahasia tidak diperlukan
- Jika pekerjaan dijalankan langsung dari hook, push bisa ditolak saat gagal atau penyelesaiannya tertunda, sehingga pemrosesan dilakukan di latar belakang dengan antrean pekerjaan minimalis
nq - Hook hanya memanggil
nq, dan log diperiksa denganssh server nqtail -a, sehingga operasinya cepat dan sederhana - Jika diperlukan, build dapat diisolasi dengan landdown·Podman, informasi rahasia dikelola dengan sops, atau alur pengembangan diperluas dengan patch Git via email,
git-shell, dangit http-backend
Konfigurasi hook post-receive dan nq
- Di server pribadi, buat repositori dengan
ssh server git init --bare repolalu clone dengangit clone server:repo - Letakkan
hook post-receiveberbentuk skrip shell di direktori hooks pada repositori bare, sehingga CI dimulai setiap kali ada push - Jika pekerjaan dijalankan langsung dari hook, ada dua masalah yang muncul
- Jika skrip gagal, push akan ditolak
- Jika eksekusi skrip lambat, penyelesaian push juga ikut tertunda
- Di dalam hook, panggil antrean pekerjaan minimalis
nquntuk menambahkan pekerjaan ke antrean latar belakang- Log diperiksa dengan
ssh server nqtail -a - Proses konfigurasinya dapat dilihat di tutorial singkat
- Log diperiksa dengan
Isolasi dan perluasan cara pengembangan
- Untuk menjalankan build di sandbox, landdown dapat digunakan
- Dengan Podman, build dapat diisolasi dari lingkungan host, atau sops dapat digunakan untuk mengelola informasi rahasia
- Untuk pengembangan bergaya bazaar, konfigurasi yang menerima patch Git melalui email cocok digunakan
- Pengembangan bergaya cathedral dapat dikonfigurasi dengan
git-shellataugit http-backend
1 komentar
Komentar di Lobste.rs
CI setidaknya punya dua masalah
Masalah yang mudah adalah menjalankan
make testsaat kode berubah, sedangkan masalah yang sulit adalah menjalankanmake testdi Linux, Windows, dan Mac sekaligusSaya tidak puas karena pengalaman developer dan fitur debugging pada engine yang ada selalu dinomorduakan, jadi saya sedang membuat sistem CI di https://ci.pico.sh. Saya juga tidak suka DSL, dan YAML berantai secara hierarkis terasa seperti perlahan-lahan menyedot daya hidup
Saya pernah membangun ini di atas gitolite dan meneruskannya ke Temporal agar proses build bisa dikendalikan tanpa batas
Saat eksekusi gagal, push bisa saja ditolak, tetapi biasanya saya membiarkan hook lolos lalu menangani kegagalan secara terpisah; konfigurasinya juga sederhana dan menyenangkan
Sebagai CI minimal lain yang berpusat pada eksekusi skrip shell, ada laminar CI, yang juga menyediakan UI web
Dulu sekali, di lingkungan perusahaan khusus Windows, kami menaruh Mac mini sebagai server CI lokal yang dipakai seluruh tim untuk membangun aplikasi iOS; itu salah satu cara awal kami memanfaatkan Git
Saya menemukannya di https://mccd.space/git/, dan tampaknya menggunakan fork stagit
Sampai beberapa bulan lalu saya menjalankan Forgejo dan Woodpecker, tetapi sebagian besar fiturnya tidak saya perlukan, jadi saya menghapus semuanya dan sedang mencari konfigurasi yang lebih ringan seperti ini. Tugas berikutnya memang CI, jadi waktunya pas, dan saya sedang mempertimbangkan apakah akan me-mirror library kecil yang akan segera saya rilis ke SourceHut
Repositori dipublikasikan read-only di web dengan git-daemon, dan cara konfigurasi lengkapnya sudah saya rangkum di sini
Dari tulisan ini saya baru mengenal
nq, tetapi mungkin saya akan memakaisystemd-runKarena saya memakai Nix di hampir semua runner, jika hasil
nix flake checkdiekspos sebagai metrik dan log OTLP, sepertinya kebutuhan CI bisa diselesaikan lewat sistem monitoringSaya suka konfigurasi platform pengembangan self-hosted yang sederhana seperti ini
Untuk CI, bubblewrap, sistem container yang ringan dan sederhana, bisa disiapkan dan digunakan dengan mudah. Namun jika memakai
nq, tampaknya menolak push saat CI gagal tidak memungkinkan; saya penasaran bagaimana itu ditanganiJika perlu isolasi lebih, Podman, Docker, atau bubblewrap bisa ditambahkan. Saya tidak menolak push saat CI gagal karena alasan yang sama dengan tidak memasang hook pre-commit yang menjalankan pengujian: kadang pekerjaan yang rusak tetap perlu di-commit atau di-push, dan push bisa menjadi sangat lambat. Jika perlu penolakan, jalankan CI secara sinkron tanpa
nqdan blokir push saat exit code bukan 0Atau, branch selain main bisa dijalankan dengan
nq, sementara branch main saja dijalankan secara sinkronTautan
landdowntampaknya rusak