Mobil uygulamalar ve sunucu uygulamalarının CI/CD süreçleri arasında çok önemli farklılıklar olması nedeniyle, mobil dünyada CI/CD süreçleri Jenkins gibi CI/CD araçları yerine Appcircle gibi mobil alanda özelleştirilmiş araçlar ve kaynaklarla yönetilmektedir. Bu yazıda, bu farklılıkların en temel beş tanesine değineceğiz. Tabii bu detaylara girmeden önce gelin kısaca CI/CD kavramlarını inceleyelim.
CI(Continuous Integration)/CD(Continuous Delivery & Deployment) Nedir?
CI (Continuous Integration/Sürekli Entegrasyon): Geliştirdiğimiz projenin kaynak dosyalarının bir iş akışı sürecinden (Workflow/Pipeline) geçen kontrol ve derleme adımlarına CI denir. Bu süreçte kaynak dosyalar derlenmeden önce kırılmalar var mı, kalite süreçleri sağlıklı uygulanmış mı gibi kontrol mekanizmaları çalışır ve yeni eklentilerin tutarlılığı kontrol edilir. Beklenen standartların sağlanması durumunda uygulama paketleri oluşturulur.
CD (Continuous Delivery&Deployment/Sürekli Teslimat&Dağıtım): CI süreci sonrasında oluşan paketlerin ilgili ortamlarda teslim edilmesi/dağıtılması sürecidir. Teslimat daha çok ilgili ekipler tarafından yapılırken dağıtım daha çok sistem tarafından otomatik yapılır. Mesela Test ortamına çıkılacak paketler otomatik yapılabilir, prod ortamına çıkacak paketler bir ekip tarafından yapılabilir.
CI/CD Neden önemlidir?
Bu konu üzerine ayrı bir yazı hedefliyorum ancak kısaca özetlemek için şunları söyleyebiliriz:
- Sürekli devam eden operasyonel işler geliştiricilerin ve altyapı ekiplerinin zamanını çok almakla birlikte, tekrar eden benzer işler olduğu için hataya açık olabiliyor. Bu sebeple süreçlerin otomatikleştirilmesine ihtiyaç duyuluyor.
- Derleme ve Paketleme süreçleri CPU ve RAM ağırlıklı işlemler olduğu için geliştiricinin makinesini yoruyor ve çalışmasına engel olabiliyor. Bu durumda geliştirici paketleme sürecinde – ki bu bazen 2-3 saat sürebiliyor- diğer çalışmalarını yapamıyor ve bloke oluyor.
- Her geliştiricinin ortamı (kullanılan IDE, kütüphane versiyonları gibi.) farklı olabileceğinden dolayı paketleme sonrasında farklı sonuçlar doğabiliyor. Bazen de önbellek tabanlı sorunlar oluşabiliyor. Bu sebeple ekiplerin ortak kullanabileceği bir ortama ihtiyaç duyuluyor.
- Kurumsal organizasyonlarda standartları oluşturmak ve korumak için herkesin ortak bir yapı kurması, tecrübeler doğrultusunda bu yapının iyileştirilerek kişi bağımsız bir yapı oturtulmasına ihtiyaç bulunuyor.
- Paketleme ve Dağıtım, geliştiricinin temel görevleri arasında değildir. Bu tip operasyonlar farklı bir disiplin olduğu için rol çatışması yaşanabiliyor.
Kurumsal organizasyonlarda CI/CD hatta CT (Continuous Testing) süreçlerini DevOps ekipleri yönetiyor. Ancak sektörde çoğunlukla Mobil CI/CD/CT süreçlerinin mobil takımlar tarafından yürütüldüğünü görüyoruz. Çünkü DevOps denildiğinde akla daha çok backend dünyası ihtiyaçlarını yöneten disiplinler geliyor. Belki de konunun doğduğu yer backend olduğu içindir, burası biraz tartışmalı bir konu.
Genelde mobil takımlar kendi CI/CD süreçlerini oturtmak için SaaS tabanlı yazılımlar veya şirket içerisinde open source (Jenksin, Fastlane gibi) yazılımları kullanarak bir yapı oluşturuyor ve yönetiyorlar. Mobil CI/CD pazarı konusundaki daha fazla detayı şu adresten erişebileceğiniz raporda inceleyebilirsiniz: https://jasoncarter.co
Mobil dünya ve backend dünyasının disiplin ve akışları ayrı uzmanlık alanları olduğu için bu alanlarda ön plana çıkan ürünler de farklılaşmış durumdadır.
Backend dünyası için ön plana çıkan CI/CD ürünleri:
- Bamboo (Bitbucket Pipelies)
- CircleCI
- GitHub Actions
- GitLab CI
- Jenkins
- Microsoft VSTS (Azure Pipelines
Buraya onlarca araç daha eklemek mümkün.
Mobil dünya için ön plana çıkan CI/CD ürünleri ise bir elin parmaklarını geçmiyor:
- Appcircle
- Bitrise
- Codemagic
- VS App Center
Mobile ve backend dünyasındaki CI/CD süreçlerindeki farklar nelerdir?
Kendi gözlemlerime göre dikkatimi çeken temel farklılıkları şöyle sıralayabilirim:
- Backend dünyasında kurallar ve süreçler daha esnek olmasının yanında kurumlar kendi dinamiklerine göre bu süreçleri esnetebilmektedir. Ancak mobil dünyada ekosistem Apple ve Google tarafından çok sıkı kontrol edilmektedir. Bu sebeple mobil dünyanın kendisine özel bir süreç akışı bulunmaktadır. Bu süreçler her yıl güncellemeler ile birlikte ciddi ölçüde değişmekte ve bunu yakından takip etmek daha çok mobil takımların yaptığı bir iştir. Bu sebeple de Appcircle mobil dünyanın dinamiklerine göre süreçleri ve endüstri standardı akışları içermekte ve yeniliklere göre kendini güncellemektedir.
- Backend dünyasında uzmanlık için gereken teknik disiplinler (Container Technologies, Messaging, Security, Performance vs) ve öğrenilmiş dersler (best practices) mobil dünyadan tamamen farklıdır. Backend dünyasında CI/CD süreçlerinde DevOps ekiplerinin kendi ortamlarına ve dinamiklerine çok farklı alternatifleri söz konusu olurken mobil dünyada bu süreçler ve uygulama yöntemleri daha kısıtlı seçeneklere sahiptir ve sıkı disipline edilmiştir. Örneğin, Mac olmadan iOS uygulamaları derlemek hiçbir şekilde mümkün değildir.
- Mobil dünyada tüm projeyi derleyip dağıtan bir yapı (IPA, APK, AAB) varken, backend dünyasında bu daha çok ardışıl bir yayın süreci (inceremental deployment) olmaktadır. Backend projesinde sadece bir CSS’i güncelleyerek bile sürüm çıkmak mümkünken, mobil dünyada bir satır değişiklikte bile tüm paketi derlemek gerekmektedir. Bu durumda da tüm paketin yeniden test edilmesi gibi operasyonel işler ortaya çıkmaktadır. Bir diğer fark ise mobil dünyada paketleme sonrasında cihazlara dağıtım gerekmesidir. Sunucu tarafında ise değişiklikler anında yayınanabilmektedir. Appcircle CD sürecinin sağlıklı yürümesi için entegre ve otomatize bir test ve dağıtım modülü de sunmaktadır.
- Mobil dünyada oluşan paketlerin son kullanıcıya yayınlanması için Apple ve Google’ın review süreçlerinden geçmesi gerekmektedir ve bu süreç zaman almakla birlikte tamamen Apple ve Google’ın insiyatifindedir. Backend dünyasında ise yayınlama süreci tamamen kurumun kendi insiyatifindedir. Bu nedenle, mobil dünyada paketlerin daha iyi test edilmesi ve review süreçlerine uygun hazırlanması ayrı önem kazanmaktadır. Appcircle projelerde hata oluşmaması için kontrol mekanizmaları sunmakta ve Store’ların test kanallarına otomatik gönderme seçeneği sağlamaktadır.
- Mobil dünyada code signing başlı başına ayrı bir bürokratik süreçtir ve iOS & Anroid için öğrenilmesi gereken ayrı disiplinlerdir. Paketleme işleminde hedefe göre farklı sertifika türleri ile bunu yönetmek gerekmektedir. Backend dünyasında sertifikalar daha esnek bir yapıda olmakla birlikte kullanım şekli tamamen kurum insiyatifindedir. Appcircle üzerinde mobil projeler için süreci kolaylaştıran merkezi bir sertifika yönetim modülü bulunmakta, güvenliği ve yönetimi rol tabanlı sağlanmaktadır.
Özet olarak Mobile CI/CD süreçleri Backend/Altyapı ekiplerinin süreçlerinden farklıdır ve mobil takımlar bu süreçleri oluşturmak ve yönetmek için Devops ekiplerinden destek alsa da genellikle CI/CD süreçlerini kendileri oluşturmaktalardır. Mobil takımlardaki geliştiricilerin kaynaklarının ortalama 5’te 1’ini bu süreçler için ayırdıkları görülmektedir. (referans: https://jasoncarter.co )
Appcircle, mobil takımların CI/CD süreçlerini kurumsal dinamikleri de göz önüne alarak yönetebilecekleri kullanımı basit bir araç olarak hayata geçirilmiştir. Daha detaylı bilgiyi https://appcircle.io adresinde bulabilir ve gelişmeler için Twitter’da @appcircleio hesabını takip edebilirsiniz.