IIS üzerinde çalışan ASP.NET Core Uygulamasına Azure Pipeline’ı Kurmak
Bu yazıda, IIS üzerinde çalışan ASP.NET Core uygulamamıza azure pipeline kullanarak build ve deployment işlemlerini ayarlamayı göreceğiz.
Öncelikle, uygulamamızın IIS üzerinde başarılı bir şekilde çalıştığından emin olduktan sonra, dev.azure.com girerek, yeni proje oluşturuyoruz. Daha sonra Soldaki Pipelines bölümünden Build Pipeline’ı seçiyoruz.
Daha sonra projemizin kodunun olduğu yeri seçiyoruz, ben kendi projem için GitHub’ı seçeceğim. Daha sonra gelen ekranda projemin repository’sini seçiyorum. Sonrasında ise ASP.NET Core projeleri için default gelen yaml türündeki azure-pipelines.yml dosyası karşımıza çıkıyor.
Build Pipeline
Şimdi sıra sıra açıklıyalım.
Satır 6 ve 7 de, eğer benim repository’im master branchına pushlanmış bir commit varsa build pipeline’ı devreye sok diyoruz.
Satır 8'de build edeceğimiz image’ı seçiyoruz, uygulamamız IIS üzerinde olduğu için windows-latest’i seçiyoruz.
Satır 17'de baktığımız zaman ise, yaptığı tek şey, aşina olduğumuz dotnet publish -c Release -o publishDir komutu çalıştırmak. Burda $() ile yukarıda variables bölümünde tanımladığımız değişkenlere referans veriyoruz. Böylelikle daha sonra kolaylıkla değişiklik yapabiliyoruz, istersek doğrudan da ‘ — configuration Release .. şeklinde yazabilirdik. Tamam buildConfiguration’u yukarıda gördükde, $(Build.ArtifactStagingDirectory) bu ne şimdi diyebilirsiniz? Bu bir predefined değişkendir. Bunu biz tanımlamıyoruz, default geliyor. Peki nedir bu? ArtifactStagingDirectory, binary dosyalarımızı publish ettiğimiz klasördür. Bu klasör ile, release pipeline’na git bunun içindeki her şeyi al, bizim servere gönder diyoruz.
Satır 24'de ise aldığımız çıktıyı yani artifacts’ı Azure pipeline publish et demiş oluyoruz.
Yaptığımız değişiklikleri kayıt edip, commit mesajımıza belirledikten sonra build işleminin başladığını görüyoruz.
Build pipeline’ımızı başarılı bir şekilde çalıştırdık. Şimdi sırada Release pipeline.
Release Pipeline
Amacımız build pipeline ile oluşturduğumuz artifact’ı alıp serverimize deploy etmek. Tabi bunu yapmadan önce, serverimizi deployment pool’a [2] kaydetmemiz gerekiyor.
Deployment pool oluşturmadan önce uygun izinlerimizi aldığımızdan emin oluyoruz. Şimdi oluşturalım.
Azure DevOps logosuna tıklayıp, Organization Settings bölümüne gidip, Deployment pools’u seçiyoruz. Daha sonra pool name’mizi ve projemizi seçiyoruz. Daha sonra Azure devops’un bizim için generate ettiği registration script’ini alıp, deploy edeceğimiz windows serverinin PowerShellinde administrator modunda çalıştırıyoruz. Tabii bunu yapmak için Use a personal access token in the script for authentication seçili olması gerekiyor.
default NT AUTHORITY\SYSTEM’u seçiyoruz. Bu script ile serverimizle azure devops arasında güvenilir bir bağlantı kuruyoruz. Detaylar burada.. [3]
Daha sonra deployment tools’a tekrar döndüğümüzde, Status bölümünde
yaptığımız işlemin başarılı bir şekilde gerçekleştiğini görüyoruz.
Artık release pipeline’ı oluşturmak için hazırız.
Sol menüden Releases bölümüne geliyoruz, oradan New Pipeline’ı seçiyoruz. Daha sonrada çıkan template bölümünde IIS website deployment’i seçiyoruz.
Daha sonra karşımıza çıkan Artifact bölüme gelip, Add’e tıklıyoruz.
Buradan daha önce oluşturduğumuz build pipeline seçiyoruz. Ve Add’e basıyoruz.
Daha sonra Tasks bölümüne gelip, Verdiğimiz stage name altında beliren Deployment process’e tıklayıp, sağdaki bilgileri dolduruyoruz.
- Stage name: Verdiğiniz İsim artık ne olursa
- Configuration type: IIS website
- Action: Create Or Update
- Website name: domain.com (Burası IISda sitenize ne isim vereceksek o.)
- Binding bilgilerini giriyoruz.
Daha sonra yine Tasks’ın altında IIS Deployment’i seçiyoruz. Ve sağ tarafda istenilen bilgileri girmeye başlıyoruz.
Deployment group istiyor, biz zaten onu oluşturmuştuk, oluşturduğumuz pool’u seçiyoruz. Diğer yerleri default bırakabiliriz.
Yine Task’ın altındaki IIS Web App Manage’i seçiyoruz.
Physical path’ı, IIS de sitemizi hangi directory’de tutuyorsak onla değiştiriyoruz. Sonrasında Create or update app pool bölümünü işaretliyoruz.
Burada IIS tarafında sitemiz için oluşturulacak olan Application Pool ayarlarını giriyoruz.
Diğer seçenekleri default bırakıyoruz.
Sonrasında IIS Web App Deploy’a tıklıyoruz. Burda bir şey değiştirmemize gerek yok. Sadece kontrol ediyoruz. Daha sonra Save diyerek release pipeline’ımızı kaydediyoruz.
Sonrasında kırmızı ile işaretlenen icona tıklayıp, trigger’ı enable ederek, her build işleminden sonra release pipeline’ı devreye sok, bizi yorma diyoruz. :) Daha sonra Create Release’e tıklıyoruz.
Sonrasında oluşturduğumuz Release’e tıklayarak Deploy’u seçiyoruz. Manuel yapıp, daha önce oluşturduğunuz build’i başarılı bir şekilde serverimize atıp atmadığımızı test edeceğiz, sonrasında bütün ipler azurede olacak. Biz ne zaman repositoryimize push edersek, o build pipelini çalıştıracak, oluşan artifact’ı release pipeline’a verecek, release pipeline’de servere çıktıyı gönderecek.
Daha sonra üstte bulunan Deploy seçeneğini seçiyoruz. Ve sonuç..
Böylelikle release işlemimize başarılı bir şekilde yapabilmiş olduk. İnanmıyosanız, gidip serverinize bakabilirsiniz :) Eğer release pipeline’da sıkıntı olursa korkmayın, aynı release’i birden fazla kere deploy edebilirsiniz.
Daha sonra Continuous Integration’u yapabilmişmiyiz bakmak için projemizde birtakım değişiklikler yapıp github’a pushluyoruz. Fakat repositorymize azure pipeline falan eklediğimiz için önce bir git pull yapmanız gerekiyor.
Böylelikle pipeline’larımızı başarılı bir şekilde kurmuş olduk. Bir sonraki yazıda görüşmek üzere inşallah. :)