Bölüm 1'de, Azure DevOps için bir Microsoft hesabı oluşturup Azure DevOps ortamına giriş yaptık. Ardından Visual Studio'da bir ASP.NET Core Web Projesi oluşturarak projeyi Azure DevOps'taki master branch'ine gönderdik.
Şimdi, Azure Pipeline'da CI sürecini oluşturacağız. Ancak, derleme işlemlerini Azure kaynakları yerine kendi sunucularımızda gerçekleştireceğiz. Bu nedenle öncelikle agent pool'a kendi agent'ımızı eklememiz gerekiyor.
Azure DevOps sayfasında sol alt köşedeki Project Settings'e tıklıyoruz. Açılan sayfada, sol tarafta bulunan Pipelines başlığının altından Agent Pools sayfasına geçiyoruz.
Bu sayfada, kullanabileceğimiz agentları gruplar halinde görebilir ve yönetebiliriz. Bu gruplara "pool" denir. Varsayılan olarak, ilk açılışta iki adet agent pool bulunur: Azure Pipelines (Azure kaynakları) ve Default (boş). İsterseniz Add pool diyerek kendi pool'unuzu oluşturabilirsiniz. Ancak ben yeni bir pool oluşturmadan Default pool ile devam edeceğim.

Agents sekmesine geçerek New agent butonuna tıklıyoruz.

Açılan pencereden, agent dosyalarını Download the agent butonuna tıklayarak indirip, build işlemlerini gerçekleştireceğimiz sunucunun C: sürücüsüne kaydediyoruz.

Ben bu dosyaları CI-Agent adında bir klasöre çıkarıyorum.

Daha sonra yönetici olarak çalıştırdığım PowerShell'de C:\CI-Agent konumuna geçip config.cmd dosyasını çalıştırıyorum. Benden Server URL isteyecek; bu bilgi, https://dev.azure.com/OrganizasyonAdı formatında girilmeli.


Server URL'yi girdikten sonra kimlik doğrulama tipini seçmemiz gerekecek. PAT (Personal Access Token) kullanacağım için bu kısma PAT yazıyorum ve devam ediyorum.

Azure DevOps'ta PAT oluşturmak için sağ üst köşedeki çarklı profil ikonuna tıklayıp Personal Access Tokens sayfasına gidiyorum.

Açılan sayfadan New Token butonuna tıklıyorum. New Token butonuna tıklayıp, token'a bir isim veriyor ve son kullanma tarihini mümkün olduğunca ileri bir tarihe ayarlıyorum. Scope olarak yalnızca Agent Pools yetkisi vermem yeterli olacak.


Token'ı oluşturduktan sonra bilgileri kopyalayıp PowerShell'e yapıştırıyorum.

Ardından, hangi agent pool'a kaydolmam gerektiğini soracak. Default pool'da olduğumuz için Enter tuşuna basarak geçiyorum. Sonrasında agent için bir isim istiyor, ben CI-Agent-01 adını veriyorum.

Diğer soruları Enter ile geçebiliriz. Fakat arada bir soru var. Sunucunun yeniden başlatılması durumunda agent'ın otomatik olarak başlaması için "Enter run agent as service" sorusuna evet diyorum.
Kurulum tamamlandıktan sonra run.cmd dosyasını çalıştırarak agent'ın bağlantısını sağlıyorum.


Agent kurulumu bu kadar. CI pipeline'ını oluşturduğumuzda, CI-Agent-01 sunucusu build işlemlerini yürütecek.
Eğer sunucunuz yeni kurulduysa, .NET 8.0'ın kurulu olduğundan emin olun. Build işlemleri için gereklidir. Kurulum sonrası sunucunuzu yeniden başlatmanız gerekebilir.

Agent kurulumumuz tamamlandıktan sonra CI Pipeline oluşturma adımına geçebiliriz. Ben burada yaml yerine klasik görünümlü pipeline oluşturmayı tercih edeceğim. Bunun için Organization Settings sayfasına gidiyorum. Sol menüdeki Pipelines başlığının altından Settings bölümüne tıklıyorum ve "Disable creation of classic build pipelines" ayarını Off yapıyorum. Aynı şekilde, CD pipeline'ını da klasik görünüme alabilmek için "Disable creation of classic release pipelines" ayarını da Off durumuna getiriyorum.

Şimdi projem için CI pipeline'ı oluşturabilirim. Pipelines menüsünden Create Pipeline butonuna tıklıyorum.

Açılan sayfada "Use the classic editor" seçeneğine tıklayarak devam ediyorum.

Projemizin kaynak kodunun yerini seçip Continue butonuna tıklıyorum.

Hazır template'ler arasında Empty Job seçeneği ile devam edeceğim.

Pipeline'da ilk iş olarak Agent Pool'u seçiyorum, burada Default pool'u kullanıyorum.

Daha sonra Agent job 1 kısmına ekleyeceğim tasklar şunlar olacak: 1 adet NuGet, 2 adet .NET Core ve 1 adet Publish Build Artifacts.

Build işlemi için 1. Net Core taskında düzenlemeler yapıyorum.
Path to project(s) or solution(s):
***.sln
Arguments:
--configuration $(BuildConfiguration) -p:PackageAsSingleFile=true -p:PackageLocation="$(build.artifactStagingDirectory)"

Publish işlemi için 2. Net Core taskında düzenlemeler yapıyorum. Öncelikle Command seçeneği publish yerine build seçili ise publish olarak değiştiriyorum.
Arguments:
--output $(Build.ArtifactStagingDirectory) --configuration $(BuildConfiguration)

Diğer tasklarım için varsayılan düzende bırakıyoruz. Burada $ ile başlayan değerler bir değişken ve varsayılan değişkenlerin dışında bir değişken eklediğimizde bunu Variables sekmesinden eklememiz gerekecektir. Bu tasklardaki argumanlarda yer alan BuildConfiguration değişkeni dışındaki tüm değişkenler Azure DevOps tarafında tanımlı değişkenlerdir.

Variables sekmesine gelip Add butonuna tıklayıp BuildConfiguration değişkenimi release olarak ekliyorum.

Pipeline oluşturma işlemi bu kadar, şimdi bunun bir CI süreci olabilmesi için bir olayın tetiklemesi lazım. Bunun için Triggers sekmesine geliyorum, Continuous integration altından yekta.web.tr'ye tıklayıp sağda yer alan "Enable continuous integration" tikini seçiyorum. Bu tiki seçmemin sonucunda projemde master branchine bir push geldiği zaman bu pipeline tetiklenecek ve agent'ım görevlerini yapacak.

Artık Save butonuna tıklayarak CI pipeline süreç oluşturma işleminden çıkabilirim.
Sağlamasını yapmak için Visual Studio'da projemi master branchine push atıyorum. Bunun sonucunda pipeline otomatik tetikleniyor.

CI pipeline sürecinin detayına bakmak isterseniz üzerine tıklayarak bakabilirsiniz.

Bir sonraki yazımda, Deployment Groups sayfasından IIS kurulu sunucumuzu ekleyip, Releases sayfasında CI sürecinde publish edilen proje dosyalarını IIS kurulu sunucumuza deploy edeceğiz. Bu sayede de CD sürecini tamamlamış olacağız.