DevOps, geliştirme ve dağıtım süreçlerini basitleştirmeye çalışan firmalar için yazılım geliştirme dünyasında ayrılmaz bir bileşen haline geldi. Mevcut çeşitli DevOps teknolojileri arasında bazen ihmal edilen ancak gerçekten etkili olan bir tanesi vardır.
Bu hayati teknoloji “ Git Hooks” tan başkası değil. ”
Git Hook'lar görevleri otomatikleştirmek, kodlama standartlarını uygulamak, sürekli dağıtımlar gerçekleştirmek ve testler yürütmek için harika araçlardır.
DevOps uygulamalarımızda devrim yaratmak için Git Hooks'u nasıl kullanabileceğimizi görelim!
Önce resmi tanıma bakalım:
Kancalar, git'in yürütülmesi sırasında belirli noktalarda eylemleri tetiklemek için kancalar dizinine yerleştirebileceğiniz programlardır.
Neyse ki bu gerçekten basit bir tanım!
Okuyucuların tanımla ilgili aklındaki bazı soruları yanıtlamaya çalışalım.
S) Hooks dizini nedir? Nerede bulunuyor?
Hooks dizini, Git deposundaki yürütülebilir programları veya Git'in yürüteceği Hook'ları içeren bir dizindir. Varsayılan olarak hooks dizini $GIT_DIR/hooks
şeklindedir. Kullanıcılar bunu core.hooksPath
yapılandırma değişkenini kullanarak da yapılandırabilirler.
S) Git'in yürütme noktaları nelerdir?
Git yürütme noktaları, Git iş akışında kancaların çalıştırılabileceği adımlardır. Ön işleme, İşlem sonrası, İtme Öncesi, Alma sonrası, Yeniden oluşturma öncesi ve Birleştirme sonrası Git yürütme noktalarına bazı örneklerdir.
Bu bölümü özetlemek gerekirse Git Hooks için aşağıdaki tanımı yapabiliriz:
Git, kodu işleme, aktarma veya birleştirme gibi belirli işlemlerden önce veya sonra "kanca" olarak bilinen komut dosyalarını çalıştırır. Geliştirme süreci sırasında görevleri otomatikleştirmenize, politikaları uygulamanıza ve kod tabanıyla etkileşime girmenize olanak tanır. Git kancaları Git deponuzun
.git/hooks
dizininde saklanır
Herhangi bir taahhüt mesajına "GÖREV*" normal ifadesini uygulayacak basit bir Git kancası oluşturmaya çalışalım.
Yeni bir git_hooks_tut
dizini oluşturun ve içinde yeni bir git deposu başlatın.
~/projects$ mkdir git_hooks_tut ~/projects$ cd git_hooks_tut ~/projects/git_hooks_tut$ git init Initialized empty Git repository
Hooks dizinine girip içeriğini inceleyelim.
~/projects/git_hooks_tut$ cd .git/hooks ~/projects/git_hooks_tut/.git/hooks$ ls applypatch-msg.sample pre-applypatch.sample pre-push.sample commit-msg.sample pre-commit.sample pre-rebase.sample fsmonitor-watchman.sample pre-merge-commit.sample pre-receive.sample post-update.sample prepare-commit-msg.sample update.sample
Hooks dizini bazı örnek komut dosyalarıyla birlikte gelir. .sample
uzantısı bunların varsayılan olarak çalışmasını durdurur. Bir kancayı "kurmak" için yapmanız gereken tek şey .sample
uzantısından kurtulmaktır.
Veya yeni bir komut dosyasıyla sıfırdan başlıyorsanız, yukarıda listelenen dosya adlarından biriyle eşleşen, ancak .sample
uzantısı olmayan yeni bir dosya ekleyebilirsiniz.
Kullanım durumumuz için bir taahhüt mesajı kancasına ihtiyacımız olacak. Devam edin ve commit-msg
adında yeni bir komut dosyası oluşturun.
~/projects/git_hooks_tut/.git/hooks$ touch commit-msg
Commit mesaj kalıbımızı garanti altına alacak mantığı commit-msg
betiğine ekleyelim.
#!/bin/sh commit_msg_file=$1 commit_msg=$(cat "$commit_msg_file") # Check if the commit message starts with "TASK" if ! echo "$commit_msg" | grep -q "^TASK"; then echo "Commit message must start with 'TASK'" exit 1 fi
Son olarak, commit-msg
betiğini çalıştırılabilir hale getirin. Çalıştırılamayan komut dosyaları, hooks dizininde bulunsalar bile git tarafından atlanır.
~/projects/git_hooks_tut/.git/hooks$ chmod +x commit-msg
Ve bu kurulumla kancalarımız tamamlandı! Şimdi test edelim.
Şimdi yeni bir dosya oluşturup onu commit etmeye çalışacağız; önce geçersiz bir mesaj formatıyla ve ardından geçerli bir mesaj formatıyla.
~/projects/git_hooks_tut/.git/hooks$ cd ../.. ~/projects/git_hooks_tut$ touch README ~/projects/git_hooks_tut$ ls README ~/projects/git_hooks_tut$ git add README ~/projects/git_hooks_tut$ git commit -m "Added Readme File" Commit message must start with 'TASK' ~/projects/git_hooks_tut$ git commit -m "TASK-0000: Added Readme File" [master (root-commit) 7f3648a] TASK-000: Added Readme File
İşler ideal şekilde çalışıyor!
Git, bir dizi yürütme noktası için kancalar oluşturmamıza olanak tanır. Bunlardan bazıları aşağıdaki gibidir:
Pre-Commit Hook: Bu kanca, bir taahhüt oluşturulmadan önce yürütülür. Taahhüt edilen değişiklikleri doğrulamamızı sağlar.
Ön Alma Kancası: Ön alma kancası, herhangi bir referans değiştirilmeden önce uzak depoda çalıştırılır ve özel kurallar veya politikalar uygulamanıza olanak tanır.
Alma Sonrası Kanca: Bu kanca, referansların güncellenmesinden sonra uzak depoda da yürütülür. Bildirim göndermek ve/veya ek görevleri gerçekleştirmek için kullanılabilir.
Ön İtme Kancası: Bu kanca, bir itme yapılmadan önce gerçekleştirilir. Bu, belirli türdeki taahhütleri zorlamayı engelleyen belirli politikaları uygulamak için kullanılabilir.
Hazırlık-Taahhüt-Msg Kancası: Hazırlama-taahhüt-msg kancası, bir taahhüt mesajı oluşturulduktan sonra yürütülür ve taahhüt mesajını değiştirmenize veya geliştirmenize olanak tanır.
Git'i daha iyi özelleştirmek için çeşitli başka kancalar da mevcuttur; bunlar Git belgelerinde bulunabilir.
Git kancaları, doğru kullanıldığında büyük potansiyele sahip bir araçtır! Biz geliştiriciler, çoğu zaman birçok karmaşık görevi çözebilecek bu tür araçların gücünü zayıflatırız.
Git Hooks'u kullanmak DevOps'u her düzeyde geliştirir, DevOps'u geliştirme döngülerine entegre etmek isteyen kuruluşlar için harika bir yol olabilir.
Bu noktaya ulaştığınız için tebrikler! Umarım bugün yeni bir şey öğrenmişsindir.