Merhabalar, belli bir süredir geliştirdiğim WordPress eklenti ve temaları için versiyon kontrolü, güncelleme gibi işlemler için Travis CI kullanıyorum. Proje sayısı ve güncelleme sayısı arttıkça build süreleri beni rahatsız etmeye başladı. Bundan dolayı WordPress projelerim ve pipeline’larımı optimize etme ihtiyacı duydum. İşler şu anlık benim için tatmin edici seviyede kısaldı. Kullandığım yöntemleri sizler ile de paylaşmak istedim. Keyifli okumalar.

XDebug’ı Devre Dışı Bırakın

Travis CI standart olarak XDebug etkin bir şekilde geliyor ve çalışıyor. XDebug raporlama işlerinde oldukça faydalı bir araç. Raporlama işlemlerinde XDebug kullanmıyorsanız ya da raporlamaya ihtiyacınız yok ise XDebug’ı devre dışı bırakmak oldukça yararlı olacaktır. Orta büyüklükte sayabileceğimiz birkaç WordPress eklenti projelerimde XDebug kapalı şekilde build aldığımda derleme sürelerim %30 ile %50 aralarında azaldı. Büyük projelerde de oldukça iyi oranlarda düşüşler sağlayacağından eminim.

Aşağıdaki kod parçacığını .travis.yml dosyanıza ekleyerek siz de XDebug’ı devre dışı bırakabilirsiniz.

before_install:
 phpenv config-rm xdebug.ini 

Multi ve Single Site Testlerinizi Ayırın

Eklentilerinizi test ederken hem multi-site hem de single-site’ler için test ediyorsanız muhtemelen WP_MULTISITE environment’ını kullanıyorsunuzdur. Bunu .travis.yml dosyanız içerisinden kontrol edebilirsiniz. Aşağıdakine benzer bir kod betiği mevcut ise hızlanmaya hazır olun :).

env:
 WP_VERSION=latest WP_MULTISITE=1
 WP_VERSION=latest WP_MULTISITE=0

script:
 phpunit 

Her test sırasında bu iki işlemi tekrar etmek yerine PHPUnit içerisinde ayrı ayrı şekilde single ve multi siteler için bu işlemleri gerçekleştirmek teknik olarak iş yükünü yarıya indirir ve build sürenizde gerçekten ciddi süreler kazanmanıza yardımcı olur. Şimdi gelin bu iyileştirmeyi nasıl uygulayabiliriz onu inceleyelim. Öncelikle .travis.yml dosyamız içerisinde çalıştırmak istediğimiz bash script’imizi tanımlıyoruz.

env:
 WP_VERSION=latest
script:
 ./bin/run-test.sh 

Daha sonrasında oluşturduğumuz test scriptimiz içerisinde .travis.yml dosyamızdan çıkartmış olduğumuz test işlemlerini gerçekleştirmemiz gerekiyor. Ben aşağıdaki gibi bir kod betiği kullandım sizler de kendi test ortamınıza göre bir betik kullanabilirsiniz.

# Run test for Multisite:
  export WP_MULTISITE = 1
  phpunit --exclude-group=ms-excluded

# Run test for Singlesite:
  export WP_MULTISITE = 0
  phpunit --exclude-group=ms-excluded

Travis CI ile Caching Özelliğini Kullanın

Sistemin Cache yapısı oldukça kullanışlı ve iyi dizayn edilmiş. Projelerimizde hangi alanlar için bu yapıyı kullanabiliriz ve bize katkısı ne olur derseniz NPM paketlerimizi ya da Composer paketlerimizi Cache belleğine yazarak test sırasında sürekli bu paketlerin kurulumlarını beklemek zorunda kalmayız. Bu kısım için proje özelinde eklemeler ya da hariç tutmalar yapılabilir. Örnek olarak genel paket klasörlerini cachelemek için kullanabileceğimiz betiği aşağıda bulabilirsiniz.

cache:
   apt: true
   directories:
     - $HOME/.npm
     - vendor
     - $HOME/.composer/cache

Hızlı Sonlandırıcı Özelliğini Aktif Edin

Travis CI içerisinde Fast Finishing özelliğini aktif ettiğimiz halde belirttiğimiz iki koşuldan biri başarılı şekilde çalıştığında o case bitmiş olarak işaretlenip devam edilir. Diğer koşullar başarısız olarak işaretlenir. Bu işlem bizlere build süresinde herhangi bir fayda sağlamıyor fakat build status bekleme anında işimize yarayacaktır. Aşağıdaki betiği .travis.yml dosyanıza ekleyerek bu özelliği aktif edebilirsiniz.

matrix:
   fast_finish: true

Optimizasyon ve iyileştirmenin sonu yok. Genel olarak birlikte küçük değişiklikler ile çok büyük olmayan projelerde nasıl hızlı ve verimli şekilde build sürelerini kısaltabiliriz bu yazımızda incelemiş olduk. Umarım projenize katkı sağlayan bir iyileştirme olur. Daha komplex projelerde bu işlemi yapmak istiyor ve buradaki yöntemler ile iyi sonuçlar alamıyorsanız bana ulaşabilirsiniz. Olabildiğince destek vermeye çalışırım. Yeni iyileştirmelerde görüşmek üzere.

Yazar Hakkında