Son dönemlerin popüler konularından biri de CI ( Continuous Integration ) ve CD ( Continuous Deployment ) süreçlerinin işletilmesidir. Özellikle CI-CD yapılarını veritabanı seviyesine indirgemek istediğinizde işlerin daha da karmaşık bir hal aldığını gözlemlersiniz ve bu sebepten CI – CD işlemlerini genellikle uygularken veritabanı hariç kısımları baz alınarak uygulanır.
CI-CD işlemlerinde Veritabanı Hariç tutulmasının Başlıca sebepleri nelerdir ?
Temel sorun, değiştirilecek nesnenin bir kod dosyası değil de bir veri / bir bilgi oluyor olması ve burada yaşanacak bir manipülasyon işleminin oluşturabileceği büyük sorunlar bütününün oluyor olmasıdır.
Bir Veritabanı Yöneticisi CI ve CD süreçlerini nasıl yönetebilir yada Veritabanı Yöneticisinin Kod yönetim süreci nasıl olmalıdır ?
Cevap hakkımız aslında developer tarafında bana değişlik talebi verdiğinde talebe göre aksiyon planlıyor olmak, UAT testi öncesinde işlemi Test Sunucusuna almak devamında da canlıya çıkartıyor olmak. Peki bunları nasıl ve ne ile yapıyorsunuz sorusunun cevabı açık ara Manuel işlem ile sabah erken saat yada gece geç saatte sistemdeki kullanıcı sayısı az olduğunda yapıyoruz olacaktır.
Resim-1 : Genel Anlamda veritabanı için devops
Teorik anlatımlardan sonra basit bir veritabanı uygulamasının SSDT ( SQL Server Data Tools ) kullanarak CI ve CD Süreçlerinin hazırlanmasının demosunu gerçekleştirelim.
Örneğimizde Azure DevOPS portalı üzerinden işlemlerimizi gerçekleştiriyor olacağız. ( https://azure.microsoft.com/tr-tr/services/devops/ )
Projemizin adresi https://dev.azure.com/caglarozenc/ssdt-demo-cicd
Proje oluşturma adımlarını yukarıdaki Azure DevOps adresinde yer alması sebebi ile o kısıma dahil olmadan visual studio tarafından devam ediyor olacağım. Visual Studio’dan yukarıdaki adresten clon yapıp projemizi oluşturalım. Bunun için ;
Visual Studio → View → Team Explorer
Resim-2
Resim-3
Projeyi oluşturmak istediğiniz path bilgisini de seçtikten sonra clone işlemini gerçekleştirebilirsiniz. Projeyi clone ettikten sonra Yeni bir veritabanı Projesi oluşturuyoruz.
Resim-4
Projemizi başarılı bir şekilde oluşturduk. Nihai olması adına ilk check-in işlemini yapabiliriz, fakat yapmadan önce projenin özelliklerinden “target platform” kjısımını değiştirmemiz gerekli. İşlemi gerçekleştirmek için Solution Explorer ekrannında proje adının üstünde sağ tıklayıp özelliklerine geliyoruz.
Resim-5
Ayrıca Visual Studio’da proje özellikleri bölümünde veritabanı özellikleri ile ilgili olarak seçilebilecek çok sayıda özel ayar var ve yine gelişmiş publish ayarlarında da çok sayıda güzel özellikler var. Biz örneğimizde temel olarak SQL Veritabanlarında CI ve CD Süreçlerinden bahsettik, bu tarz yapılanmalar ile Veritabanı süreçlerinizi de otomatize edebilirsiniz. İlave olarak Production Veritabanlarınızda veritabanı geliştirmelerinizi de çıkarken DBA’den onay gelen taleplerin yayına çıkarılmasını da sağlayan bir review onayı sonrasında release de çıkartabilirsiniz.
Yazıyı hazırlarken detaylandırmaya çalıştım fakat bu konu hakkında bir seminer / etkinlik gerçekleştirip orada sizler ile canlı bir yapıyı beraber de kurguluyor olabiliriz.
Proje ayarlarında bulunan “target platform” kısımını Microsoft Azure SQL Database V12 olarak seçip kayıt ediyoruz .
Resim-6
Bu işlemden sonra veritabanı projemizi build ediyoruz. Build işlemi sonrasında output ekranında da göreceğiniz üzere bir dacpac dosyası oluşuyor. Bu dacpac işlemini Azure DevOps portalı üzerinde deploy işlemi gerçekleştirirken kullanıyor olacağız.
Resim-7
Bunca işlem sonrasında ilk commit’i atalım artık. İşlem için Team Explorer ekranı üzerinde işlem yapıyor olacağız.
Resim-8
İlk Commit olarak “ssdt projesini oluşturuldu. “ yazıp hem commit hem de Azure DevOps portalına push ediyoruz. Push işleminin tamamlanması sonrasında Portal üzerinden işlemimizi kontrol edelim.
Resim-9
Yukarıdaki resimde gördüğümüz gibi artık projemiz bulutta ve her ortamdan rahatlıkla ulaşabiliriz. Bu kadar işlemi bir her geliştirdiğimiz projede aslında hazırlıyoruz. Örneğimizde Azure DevOps ortamını kullandık fakat GitHub’da kullanabilirdik.
Şimdi ise veritabanı projemizi tasarlamaya başlayalım. Burada sıfırdan bir veritabanı projesi oluşturabileceğimiz gibi local sunucumuzda var olan bir veritabanını da proje içerisine dahil edebiliriz. Ben veritabanı nesneleri oluşturmak yerine hızlıca local’imde var olan AdventureWorks veritabanı üzerinden işlemlerime devam ediyor olacağım. Bu işlem için Solution Explorer da projem üstünde sağ tıklayıp import bölümünden database seçiyorum. Aşağıdaki resimde gördüğünüz gibi database haricinde mevcut bir dacpac dosyasından yada bir sql dosyasından da nesneleri içeri alabilirsiniz.
Aşağıdaki Import Database Ekranı ile işlemlerimize devam ediyoruz. Bu ekran üzerine Import etmek istediğimiz veritabanımızın seçiyoruz.
Resim-10
Import database dedikten sonra gelen ekrandan select source’a basıp kaynak veritabanını seçiyoruz.
Resim-11
Yukarıdaki resimdeki “Import Settings” kısımında dikkat etmemiz gereken kısım “referenced logins “ bölümüdür. Development sunucusunda var olan erişim bilgilerini de proje içerisine dahil edilmemesi gereklidir. Çünkü Development kullanıcıları – Production ortamında olmaması gerekir. Import işlemindeki adımları da tamamladıktan sonra Solution Explorer’da veritabanı projemizi görebiliriz.
Resim-12
Yukarıdaki resimde gördüğümüz gibi AdventureWorks veritabanın tüm kırılımlarını projemiz içerisine eklendi. Projemizi tekrar build edip, push ediyor oluruz. ( Dikkat etmeniz gereken kısım Azure SQL Veritabanları Farklı Filegroup’larda çalışmaz. AdventureWorks örneğini import edecek olursanız build sırasında filegroup hataları görebilirsiniz. Bunları düzeltip, build ve push ediyor olmalısınız. 🙂
Resim-13
Buraya kadar olan kısım aslında farklı projeler geliştirken uyguladığımız sürece çok benzer. Sadece oluşturduğumuz proje türü olarak veritabanı projesi seçiyor seçmemiz ve istediğimiz veritabanı nesnelerini proje içerisine ekleyebiliriz.
Bu kısımdan sonraki süreçte işlemlerimize Azure DevOps portalı üzerinden devam ediyor olacağız. Azure DevOps portalı üzerinden build alabiliyor olmamız gerekli. Bu işlem için Azure DevOps portalında sol tarafta yer alan “Pipelines” kısımından “Builds” seçiyoruz.
Resim-14
New Pipeline’a tıklıyoruz. Karşımıza gelen ekrandan “Use the visual designer” tıklayıp işlemlerimize devam ediyoruz.
Resim-15
Visual Designer ekranında ilk karşımıza kaynak seçimi yapacağımız ekran ile karşılaşıyoruz. Bizim proje kaynağımız Azure Repos Git’de yer aldığı için direk seçili geldi fakat farklı kaynaklardan ve branchlerden seçim yapabiliriz.
Resim-16
Kaynak seçim işlemini tamamladıktan sonra Hazır taslakların seçimi konusunda bir ekran ile karşılaşıyoruz fakat biz bir veritabanı projesini build edeceğimiz için “empty job” seçiyoruz. Empty job sonrasında karşılaştığımız ekran aşağıdaki gibidir.
Resim-17
“Agent Job 1″ yazısının yanındaki artı butonuna tıklayıp msbuild’i ekliyoruz.
Resim-18
MsBuild için gerekli ayarları tanımlamasını yapıyoruz. Burada bizden projenin *.sln dosyasını göstermemizi isteyecek.
Resim-19
Tekrar Agent Job kısımındaki artı butonuna tıklayıp ikinci adım olarak build çıktılarının kopyalamak için copy adımını ekliyoruz. Source Folder ve Target Folder kısımında yer alan bilgilendirmeleri dikkate alıp işleme devam ediyorum. Ayırıcı bilgi olabilmesi adına target folder’da “\s” gibi bir ayraç belirtiyorum.
Resim-20
Build işleminin son adımı olarak publish build artifact eklioruz.
Resim-21
Build işleminde son adımları da gerçekleştirdikten sonra triggers bölümünden “Enable Continuos integration” seçimini de aktif edip “ save and queue” diyip projemizin build olmasını bekliyoruz. (Bu adım hariç yukaridaki tüm adımları “Tasks” içerisinde gerçekleştirdik.)
Resim-22
Save ettikten sonra karşımıza gelen işlem sonrasında aşağıdaki gibi bir ekran ile işlemizin başarı bir şekilde tamamlandığını görüyoruz.
Resim-23
Yukarıdaki resimin bize anlattığı, oluşturduğun veritabanı projesini ben build edebildim. Şimdi Farklı veritabanımızın içerisinde farklı işlemler gerçekleştirip build durumlarını inceleyelim.
Resim-24
Veritabanı projemiz içerisine bir adet mshowto adında klasor oluşturdum ve DemoView1 isiminde bir view hazırladım. Projemi tekrar commitliyorum.
Resim-25
Yukarıda gördüğünüz gibi commit ve push işlemi sonrasında otomatik olarak veritabanı projemiz için oluşturduğumuz pipeline üzerinde build işlemlerinde hata ile karşılaşmıyoruz. Buraya kadar Azure DevOps üzerinde SQL Server için CI işlemlerini tamamladık. Peki bu başarılı build işlemlerini birde canlıya alalım değil mi ?
Bu işlemi gerçekleştirebilmek için Azure Portal üzerinden bir Azure SQL Veritabanı oluşturuyorum. Bu Azure SQL veritabanı oluşturma konusunda Web sitemizde çok fazla içerik olması sebebi ile bu teknik detayı anlatmıyorum.
Canlı sistem diye tabir edilen ortamımızın bilgileri ise aşağıdaki gibidir. Örneğimiz içerisinde visual studio ile geliştirmesini yaptığımı veritabanı projesini canlı ortama aktarılmasını yine Azure DevOps portalı üzerinde sağlıyor olacağız.
Resim-26
Build Pipeline oluşturduğumuz gibi buna bağlı olarak bir de release pipeline oluşturmamız gerekiyor. Azure DevOps portalı üzerinden Release pipeline oluştur dediğimizde karşımıza build de olduğu gibi bir template ekranı geliyor olacak fakat biz build de olduğu gibi yine empty job seciyor olacağız 🙂 ( Hazıra karşıyız. 🙂
Resim-27
Empty Job seçtikten sonra aşağıdaki gibi bir ekran ile karşılaşıyoruz.
Resim-28
Build işleminde oluşan artifacts’ı burada gösteriyoruz.
Resim-29
Artifact seçimini gerçekleştirdikten sonra “Stage 1” tekrar geri dönüyoruz.
Resim-30
“Stage 1 “ içerisinde Task olarak “Azure SQL Dabatase Deployment” seçiyoruz.
Resim-31
Bu step’de task açıklamasında da yazdığı üzere projemizin build işlemi sonrasında oluşan dacpac dosyasını bizim vereceğimiz sunucu üzerinde çalıştırıyor olacak.
Resim-32
Yukarıdaki ekranda sizden canlı sistem verilerinizi istiyor, harici olarak azure portal hesabınız için tekrar kimlik doğrulaması yapmanızı isteyecektir. Parametreleri girdikten sonra sağ üst köşeden pipeline ayarlarımızı “save” ediyoruz.
Release pipiline oluştur dediğinizde ise işleminiz başlamıştır.
Resim-33
Burada In progress bölümüne tıklayıp daha detaylı bir işlem özeti görebilirsiniz. Release işlemini manuel olarak gerçekleştiriyoruz. Stages bölümünden build alınması sonrasında çalışabilecek şekilde de ayarlayabiliriz.
Son olarak MSHOWTO veritabanı içerisinde bizim istediğimiz geliştirmeyi yayına alınmış mı kontrol edelim.
Resim-34
Azure DevOps portaldan işlem devam ettiğini görüyoruz.
Resim-35
Gördüğünüz gibi işlemimiz devam ediyor
Resim-36
Ayrıca Visual Studio’da proje özellikleri bölümünde veritabanı özellikleri ile ilgili olarak seçilebilecek çok sayıda özel ayar var ve yine gelişmiş publish ayarlarında da çok sayıda güzel özellikler var. Biz örneğimizde temel olarak SQL Veritabanlarında CI ve CD Süreçlerinden bahsettik, bu tarz yapılanmalar ile Veritabanı süreçlerinizi de otomatize edebilirsiniz. İlave olarak Production Veritabanlarınızda veritabanı geliştirmelerinizi de çıkarken DBA’den onay gelen taleplerin yayına çıkarılmasını da sağlayan bir review onayı sonrasında release de çıkartabilirsiniz.
Yazıyı hazırlarken detaylandırmaya çalıştım fakat bu konu hakkında bir seminer / etkinlik gerçekleştirip orada sizler ile canlı bir yapıyı beraber de kurguluyor olabiliriz.
Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.
Referanslar
TAGs:CI ve CD Süreçleri,DevOps, sql, SQL Server, sql server cd, sql server CI, SQL Server Continuous Integration ve Continuous Deployment Süreçleri, sql server deops, sql server for devops