Azure DevOps Pipelines — Azure Kubernetes Service

Şevket Yılmaz
Kodiks
Published in
4 min readAug 14, 2021
Azure DevOps Pipelines Icon

Merhaba, bir makalede Azure Container Registry ve Azure Kubernetes Service Kullanımı başlığında bir ASP.NET Core uygulamasını Azure Kubernetes Service üzerinde nasıl yayınlayabileceğimizi incelemiştik. Bu makalede ise uygulamamıza Azure DevOps Pipelines ile temel seviyede CI/CD sürecini dahil edeceğiz.

Önceki yazıda bir uygulama oluşturmak yerine DockerHub’da bulunan Microsoft’a ait örnek bir uygulamanın imajını kullanmıştık. Aynı projeyi GitHub reposundan indirerek Azure DevOps’a bir repo olarak ekledim.

# https://hub.docker.com/_/microsoft-dotnet-core
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Uygulama içerisinde bulunan Dockerfile bu şekilde. Oluşturacağımız pipeline bu dosyayı kullanarak projemizi derleyecek ve imajımızı oluşturacak.

Ön bilgimizi verdikten sonra Pipeline oluşturma işlemine başlayabiliriz. Pipelines menüsüne girdiğimizde bizi aşağıdaki görsel karşılıyor;

Create Pipeline butonuna tıklayarak başlıyoruz.

Burada projemizin kaynak kodlarını seçiyoruz. Popüler versiyon kontrol sistemleri ile entegrasyon var. Biraz önce de bahsettiğim gibi Azure DevOps da bulunan repoyu kullanacağımız için Azure Repos Git seçeneği ile ilerliyoruz.

Projemizi seçiyoruz..

Burada ise projemizi hangi platformda geliştirdiğimizi seçiyoruz.
Fakat buradaki seçimimiz bize sadece pipeline dosyasını oluşturmada yardımcı olmak için var, özellikle farklı teknolojiler kullanılan karmaşık projelerde biraz sonra göreceğimiz task’lar vasıtasıyla pipeline dosyamızı kendimiz düzenlememiz gerekebilir.

Biz ‘Deploy to Azure Kubernetes Service’ seçeneğini seçerek ilerliyoruz.

Burada karşımıza çıkan pipeline dosyasında 4 temel konfigürasyon adımı bulunuyor.

  • trigger: ‘master’ CI süreci için dikkate alınacak branch imizi ifade ediyor.
    Fakat trigger meselesi aslında daha kapsamlı bir konu. Trigger çeşitleri hakkında detaylı bilgiyi bu adreste bulabilirsiniz;
  • resources: Container ve repository kaynakları ile alakalı bilgiler yer alıyor. Biz tamamen Azure hizmetlerini kullandığımız için self şeklinde atandı.
  • variables: Burada ise pipeline dosyamız içerisinde kullanacağımız değişkenlerimizi tanımlıyoruz.
    Ayrıca sağ üst köşede yer alan Variables menüsünü kullanarak sabit veya pipeline ı çalıştırdığımız anda düzenleyebileceğimiz değişkenler tanımlanabilmekte.
  • steps: Bu kısım ise uygulamamızın paketlerinin güncellenmesi, testlerin çalıştırılması ve build edilmesi gibi bütün adımları(Tasks) tanımlıyoruz.
    Sağ tarafta bulunan ‘Show assistant’ butonuna tıkladığımızda aşağıdaki görselde yer alan Tasks menüsü açılmakta.
    Burada steps başlığı altında tanımlayabileceğimiz işlem çeşitleri yer alıyor.

Çeşitli paket yöneticilerinin komutları çalıştırmak, bash veya powershell komutları çalıştırmak, temel dosya işlemleri yapmak, uygulama sunucusuna deploy işlemi, bazı CI/CD araçları ile entegrasyon gibi pek çok çeşit task bulunmakta.

Biz bu örneğimizde Azure Container Registry’ye uygulamamızın imajını gönderip Azure Kubernetes Service’e güncel imajımızı deploy edeceğiz.

Değişkenlere göz atalım.

Container Registry’mize ait bilgiler, Dockerfile dosyamızın lokasyonu, AKS’nin ACR’ye bağlanması için gereken secret bilgisi değişkenlerde yerlerini almış.

Burada dikkat çekmek istediğim bir değişken var; ‘tag’. tag değişkenine ‘$(Build.BuildId)’ şeklinde bir değer atanmış. Pipeline çalıştığı esnada kullanımımıza bazı değişkenler sunuyor, Build.BuildId bunlardan bir tanesi. Siz kendi tag yapınızı ister kendi atayacağınız bir değişken ile isterseniz de öntanımlı değişkenleri kullanarak oluşturabilirsiniz. Öntanımlı değişkenlerin tam listesine buradan ulaşabilirsiniz.

Şimdi stages kısmına göz atalım. İki adet stage bulunmakta ‘Build’ ve ‘Deploy’.

Build isimli stage aslında sağ tarafta kendimiz de seçerek ekleyebileceğimiz bir Docker task’ının buildAndPush komutunu uyguluyor.

Hangi dockerfile çalıştırılacağı, hangi repository ye gönderileceği, tag inin ne olacağı bilgilerini barındırıyor.

Deploy isimli stage, secret oluşturma ve bu secret bilgisi ile birlikte Container Registry’de bulunan ilgili imajı Azure Kubernetes Service’e gönderme işlemini gerçekleştiriyor.

Not: Bu pipeline dosyasını kaydettiğinizde projenize ekleyeceği manifest dosyaları manifest parametresinde yerini almış durumda. Manifest dosyalarınızın yerini değiştirirseniz burayı güncellemeyi unutmayınız.

Şimdi sağ üst tarafta bulunan “Save and run” butonu ile oluşturduğumuz pipeline dosyasını ve manifest dosyalarını projemize kaydetmek üzere bir commit atıyoruz.

Pipeline çalışmaya başlıyor..

Stage’lerden birinin üzerine tıklayarak detay sayfasına gidecek olursak;

Build ve Deploy isimli stage’ler bütün adımları ve bilgileri ile burada yer alıyor.

Okuduğunuz için teşekkürler!

Bu yazı sizin için faydalı olduysa, Medium ve Twitter’dan bizleri takip edebilirsiniz. Tartışmak istediğiniz herhangi bir sorunuz veya uygulama fikriniz varsa, bizimle e-posta yoluyla iletişime geçmekten çekinmeyin.

--

--