Daha önce yayınladığımız X as Code Disiplini ve Ansible Nedir? yazımızda X as Code’u IT sektöründeki herhangi bir disiplini kod ile ifade ettiğimiz, yaptığımız ve tekrar eden işlerimizi otomatize etmek için çeşitli araçlar ve yöntemler kullandığımız disiplinler bütünüdür diye tanımlamıştık. Bu yazımızda Pipeline as Code Nedir? sorusunun cevabını arayacağız. ‘as code’ disiplinin mantığı özetle, insan hatalarını ortadan kaldırmak, iş yükünü azaltmak ve iş akışlarınızda stabilizasyonu sağlamaktır. Bu yazımızda direkt iş akışlarını kod olarak ifade etmekten, yani Pipeline as Code disiplininden bahsedeceğiz.

DevOps ile birlikte, hatta belki de daha önce hayatımıza giren CI&CD kavramı ile kodun yazılım yaşam döngüsündeki adımlarını otomatize etmeye başladık. DevOps’tan önceki süreçte, bu otomasyon için Jenkins sunucusu ayağa kaldırıp build, test işlemleri, dağıtım gibi süreçleri yapacak “Joblar” yaratıp her kod değişikliğini(commit) yakalayacak şekilde konfigüre ediyorduk. Aşağıdaki diyagramda CI&CD pipeline adımlarını görebilirsiniz.

2013 yılında yayınlanan Travis CI tool’u ile birlikte, yukarıdaki CI&CD adımına yeni bir yaklaşım getirildi. Travis ile birlikte CI&CD pipeline adımları kod şeklinde travis.yml dosyasına yazarak GitHub projelerinizin kök dizinine koymanız yeterliydi. Bu dosyanın içerisinde, build/test/deployment adımlarınız bulunuyor.

pipeline-as-code-nedir

Yukarıda örnek bir travis.yml dosyasını görüyoruz. Pipeline adımları hem kolay yazılabilir hem de insan tarafından kolayca okunabilir şekilde tasarlanmış. Ne yaptığına bakacak olursak; Çalıştırılacak jobların içerisinde, **stage: test** key:value’i ile birlikte test aşamasında ne yapılacağı söylenmiş, yukarıda ./test 1 ve ./test2 scriptinin çalıştırılacağı söylenmiş. Böylelikle, yeni stage’a geçmek için tekrar bir stage açmamız gerektiğini anlayabiliyoruz. Testleri çalıştırdıktan sonra ise deploy aşamalarına geçiyoruz. Görüldüğü üzere gayet basit ve anlaşılabilir. Travis dosyamız ilerleyen süreçte işlerimiz kompleks hale geldikçe daha da kompleksleşecek; fakat bu kompleks işleri dokümante edip manuel olarak yönetmekten çok daha kullanışlı.

Travis aracının sunduğu Pipeline as Code(PaC) yaklaşımı, beraberinde birçok aracı ve yöntemi getirdi; Azure DevOps, Jenkins(Jenkinsfile), GitlabCI, Github Actions, vb. Bu araçlar ile birlikte iş akışlarımızı kod olarak ifade edip, bir Source Control mekanizmasında tutup, versiyonlayabiliyoruz.

Bir sonraki yazımızda yukarıda saydığımız araçları inceleyeceğiz.

 

Emre Aydınsoy

DevOps Mühendisi