- Kişisel bir sunucudaki bare Git deposuna
post-receivehook’u ekleyerek test, build ve dosya taşıma işlemlerini otomatikleştiren basit bir CI yapılandırmasıdır - Mevcut CI çözümlerindeki karmaşık YAML ayarları, yavaş çalışma ve zor self-hosting seçeneklerine kıyasla tam build izolasyonuna ya da gizli bilgi yönetimine ihtiyaç duyulmuyordu
- İşleri doğrudan hook içinde çalıştırmak, hata durumunda push’un reddedilmesine veya tamamlanmasının gecikmesine yol açtığı için arka plan işleme için minimal iş kuyruğu
nqkullanılır - Hook yalnızca
nqçağırır; loglarssh server nqtail -aile kontrol edilerek hızlı ve basit şekilde işletilebilir - Gerektiğinde landdown·Podman ile build’ler izole edilebilir, sops ile gizli bilgiler yönetilebilir veya Git e-posta patch’leri,
git-shellvegit http-backendile geliştirme biçimi genişletilebilir
post-receive hook’u ve nq yapılandırması
- Kişisel sunucuda
ssh server git init --bare repoile depo oluşturulur vegit clone server:repoile klonlanır - Push yapıldığında CI’ı başlatmak için bare deponun hooks dizinine shell script biçiminde bir
post-receivehook’u konur - İşleri doğrudan hook içinde çalıştırmak iki soruna yol açar
- Script başarısız olursa push reddedilir
- Script’in çalışması yavaşsa push’un tamamlanması da gecikir
- Hook içinde minimal iş kuyruğu
nqçağrılarak işler arka plan kuyruğuna eklenir- Loglar
ssh server nqtail -aile kontrol edilir - Kurulum süreci kısa bir öğreticide görülebilir
- Loglar
İzolasyon ve geliştirme biçimini genişletme
- Build’leri sandbox içinde çalıştırmak için landdown kullanılabilir
- Podman ile build’ler host ortamından izole edilebilir veya sops ile gizli bilgiler yönetilebilir
- Bazaar tarzı geliştirme için Git patch’lerini e-posta yoluyla alan bir yapılandırma uygundur
- Cathedral tarzı geliştirme
git-shellveyagit http-backendile yapılandırılabilir
1 yorum
Lobste.rs yorumları
CI'da en az iki sorun var
Kolay olan sorun, kod değiştiğinde
make testçalıştırmak; zor olan isemake testi Linux, Windows ve Mac'in hepsinde çalıştırmakMevcut motorların geliştirici deneyimi ve hata ayıklama özellikleri hep geri planda kaldığı için bundan rahatsızım; bu yüzden https://ci.pico.sh üzerinde bir CI sistemi geliştiriyorum. DSL'lerden de hoşlanmıyorum; katman katman uzayan YAML ise sanki yavaş yavaş yaşam enerjisini emiyor
Bunu gitolite üzerine kurup Temporal ile aktararak derleme sürecini hiçbir kısıt olmadan kontrol ettiğim olmuştu
Çalıştırma başarısız olursa push'u reddetmek de mümkün ama genelde hook'un geçmesine izin verip başarısızlığı ayrı ele alıyorum; yapılandırması da basitti ve eğlenceliydi
Kabuk betiği çalıştırma merkezli bir diğer minimal CI olarak laminar CI var; web arayüzü de sunuyor
Çok eski zamanlarda, yalnızca Windows kullanılan bir kurumsal ortamda, tüm ekibin kullandığı yerel bir CI sunucusu olarak bir Mac mini koyup iOS uygulaması derlemiştik; Git'i kullanmaya dair ilk denemelerimden biriydi
Bunu https://mccd.space/git/ adresinde buldum; stagit fork'u kullanıyor gibi görünüyor
Birkaç ay öncesine kadar Forgejo ve Woodpecker çalıştırıyordum ama özelliklerin çoğuna ihtiyacım yoktu; bu yüzden hepsini kaldırıp buna benzer daha hafif bir kurulum arıyordum. Sıradaki işim CI olduğu için tam zamanında geldi; yakında yayımlayacağım küçük bir kütüphaneyi SourceHut'a mirror'layıp mirror'lamamayı da düşünüyorum
Depoyu git-daemon ile web üzerinde salt okunur olarak yayımlıyorum; tüm kurulumun nasıl yapıldığını da burada topladım
nqyu ilk kez bu yazı sayesinde duydum ama muhtemelensystemd-runkullanırımNeredeyse tüm çalıştırıcılarda Nix kullandığım için,
nix flake checksonucunu OTLP metrikleri ve logları olarak dışa verirsem CI gereksinimlerini izleme sistemiyle çözebilirmişim gibi geliyorBöyle basit, kendi kendine barındırılan geliştirme platformu kurulumlarını seviyorum
CI için hafif ve basit bir konteyner sistemi olan bubblewrap kolayca kurulup kullanılabilir. Ama
nqkullanılırsa CI başarısız olduğunda push'u reddetmek mümkün görünmüyor; bunun nasıl ele alındığını merak ediyorumDaha fazla yalıtım gerekirse Podman, Docker veya bubblewrap eklenebilir. Testleri çalıştıran pre-commit hook koymamakla aynı nedenle, CI başarısız olduğunda push'u reddetmiyorum; çünkü bazen bozuk işleri de commit'lemek ya da push'lamak gerekebiliyor ve push çok yavaşlayabiliyor. Reddetmek gerekiyorsa
nqolmadan CI'ı eşzamanlı çalıştırıp çıkış kodu 0 değilse push'u engelleyebilirsinizYa da main dışındaki branch'leri
nqile çalıştırıp yalnızca main branch'ini eşzamanlı çalıştırabilirsinizlanddownbağlantısı bozuk görünüyor