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 “ ” tan başkası değil. Git Hooks” 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! İlk Önce İlk Şeyler… Kancalar Nedir? Ö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 şeklindedir. Kullanıcılar bunu yapılandırma değişkenini kullanarak da yapılandırabilirler. $GIT_DIR/hooks core.hooksPath 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. Git kancaları Git deponuzun 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/hooks dizininde saklanır İlk Git Kancalarımızı Yaratıyoruz! Herhangi bir taahhüt mesajına "GÖREV*" normal ifadesini uygulayacak basit bir Git kancası oluşturmaya çalışalım. Yeni bir dizini oluşturun ve içinde yeni bir git deposu başlatın. git_hooks_tut ~/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. uzantısı bunların varsayılan olarak çalışmasını durdurur. Bir kancayı "kurmak" için yapmanız gereken tek şey uzantısından kurtulmaktır. .sample .sample Veya yeni bir komut dosyasıyla sıfırdan başlıyorsanız, yukarıda listelenen dosya adlarından biriyle eşleşen, ancak uzantısı olmayan yeni bir dosya ekleyebilirsiniz. .sample Kullanım durumumuz için bir taahhüt mesajı kancasına ihtiyacımız olacak. Devam edin ve adında yeni bir komut dosyası oluşturun. commit-msg ~/projects/git_hooks_tut/.git/hooks$ touch commit-msg Commit mesaj kalıbımızı garanti altına alacak mantığı betiğine ekleyelim. commit-msg #!/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, betiğini çalıştırılabilir hale getirin. Çalıştırılamayan komut dosyaları, hooks dizininde bulunsalar bile git tarafından atlanır. commit-msg ~/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! Bazı Farklı Kanca Çeşitleri Nelerdir? Git, bir dizi yürütme noktası için kancalar oluşturmamıza olanak tanır. Bunlardan bazıları aşağıdaki gibidir: Bu kanca, bir taahhüt oluşturulmadan önce yürütülür. Taahhüt edilen değişiklikleri doğrulamamızı sağlar. Pre-Commit Hook: Ö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. Ön Alma Kancası: 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. Alma Sonrası Kanca: 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. Ön İtme 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. Hazırlık-Taahhüt-Msg Kancası: Git'i daha iyi özelleştirmek için çeşitli başka kancalar da mevcuttur; bunlar bulunabilir. Git belgelerinde 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.