"Enter"a basıp içeriğe geçin

ASP.NET Core Uygulamasını Jenkins ile IIS’de Yayınlama

Tahmini okuma süresi: 12 dakika

Bu makalede ASP.NET Core uygulamasını Jenkins kullanarak IIS’de yayınlama konusuna değineceğim. Bu makalenin konusu pipeline hazırlamak olduğu için Jenkins kurulumu ile ilgili aşağıdaki sayfadan yardım alabilirsiniz.

Senaryomuzda deployment yapacağımız hedef makine ve Jenkins kurulu olan makine farklı olacaktır ki Jenkins için dedike bir sunucu ayarlamanız gerekmektedir. Zira job’lar çalışırken kaynaklarınızı fazlasıyla tüketebilir 🙂

Pipeline aşağıdaki 4 adımdan oluşacak.

Checkout : Github’dan kaynak kod çekilecek.
Build : Kaynak kod derlenecek.
Deploy : Hedef makineye deployment yapılacak.

Pipeline’ı hazırlamadan önce aşağıdaki gereksinimleri sağlamanız gerekmektedir.

1. Git’in Kurulması

Checkout yapılabilmesi için Jenkins makinesinde Git’in kurulu olması gerekmektedir. Aşağıdaki adresten Git’i kurabilirsiniz.

2. NET Core SDK’nın Kurulması

Build yapılabilmesi için Jenkins makinesinde .NET Core SDK’nın kurulu olması gerekmektedir. Aşağıdaki adresten uygulamanızdaki versiyona göre ilgili SDK’yı kurabilirsiniz.

3. Jenkins Makinesine MsDeploy’un Kurulması

Deploy yapılabilmesi için Jenkins makinesinde msdeploy’un kurulu olması gerekmektedir. Bunun için aşağıdaki adresten ilgili kurulumu indirip yükleyebilirsiniz.

4. Güvenli Makine Tanımının Yapılması

Jenkins makinesi ve hedef makine aynı domain’de değilse Jenkins makinesinden hedef makineye deployment yapılamayacaktır. Aşağıdaki gibi bir hata verecektir.

Connecting to remote server 0.0.0.0 failed with the following error message : The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting.

Bu hatanın çözümü için Jenkins makinesine hedef makinenin güvenli olduğunu belirtmeniz gerekmektedir. Bunun için Powershell’de aşağıdaki komut satırını çalıştırabilirsiniz.

winrm set winrm/config/client '@{TrustedHosts="0.0.0.0"}'

5. Web Management Service’in Kurulması

Hedef makinesine uzaktan deployment yapılabilmesi için hedef makinesindeki IIS’de Web Management Service’in kurulu ve çalışır olması gerekmektedir. Servisin kurulu olup olmadığını kontrol etmek için IIS’i açın. Sol taraftaki “Connections” penceresinden sunucunuzu seçin. Sağ bölümde “Management” sekmesinin altında “Management Service” modülünü kontrol edin.

IIS - Management Service
IIS – Management Service

Bu modül gözükmüyor ise Windows özelliklerinden Management Tools’u kurabilirsiniz.

6. Web Management Service’in Aktif Edilmesi

Modülün çalışır vaziyette olması gerekmektedir. Modülün üstüne çift tıklayarak “Enable Remote Connections” seçeneğini aktip edip “start” yapabilirsiniz.

IIS - Management Service 2
IIS – Management Service 2

7. Hedef Makineye MsDeploy’un Kurulması

Hedef makinesinde MsDeploy’un kurulu olması gerekmektedir. Bunun için aşağıdaki adresten ilgili kurulumu indirip yükleyebilirsiniz.

Kurulumu yaparken “Custom” seçeneğini seçerek “IIS Deployment Handler” özelliklerini aktif etmelisiniz.

MsDeploy
MsDeploy

Servisin başarılı şekilde kurulduğu kontrol etmek için IIS’i açın. Sol taraftaki “Connections” penceresinden sunucunuzu seçin. Sağ bölümde “Management” sekmesinin altında “Management Service Delegation” modülünü kontrol edin.

IIS Management Service Delegation
IIS Management Service Delegation

Her şey hazır 🙂 Artık Jenkins’de pipeline’nı hazırlayabiliriz.


Jenkins’i açıp “New Item > Pipeline” yolunu izleyerek “job” oluşturun.

Jenkins - New Item
Jenkins – New Item

Pipeline bölümüne aşağıdaki script’i yapıştırın.

İşte bu kadar. Artık Build Now yapabilirsiniz. Kolay gelsin.

11 Yorum

  1. Hasan Hasanov Hasan Hasanov

    Merhabalar Ahmet bey, elinize sağlık güzel ve yararlı bir makale olmuş.

    • ahmetkucukoglu ahmetkucukoglu

      Eyvallah Hasan. Teşekkür ederim.

  2. Fatih Çengel Fatih Çengel

    Merhaba Ahmet,

    Çok güzel ve yararlı bir makale olmuş, çok teşekkürler. Kafama takılan bir konu var. Her deployda hedef makinede silinebilecek fakat silinmesini istemediğimiz pdf, excel, resim dosyaları gibi dosya ve klasörler var. Bunları nasıl muhafaza edebiliriz. Her deploy edildiğinde bunların silinmesinden edişe ediyorum.

    • ahmetkucukoglu ahmetkucukoglu

      Merhaba,

      Anladığım kadarıyla uygulama dizinine dosya upload ediyorsunuz. Deployment yapılan konumda uygulama dosyaları dışında dosya bulunmamalı. Her deployment ile uygulama konumu temizlenmeli. Ama bu şekilde devam edecekseniz de iki tane daha stage eklenebilir. Deployment öncesinde dosyalar farklı bir konuma kopyalanır. Deployment sonrası dosyalar tekrar uygulama konumuna kopyalanabilir.

  3. Aykut Asil Aykut Asil

    Elinize emeğinize sağlık. Çok teşekkürler 🙂

  4. eren ekinci eren ekinci

    Merhaba ,
    IIS server kullanıcı adı ve şifreyi nereye giriyoruz

  5. eren eren

    merhaba ,

    aşağıdaki gibi hata aldım. yardımcı olabilir misiniz ?

    Could not find credentials entry with ID ‘iis-credential’

    • ahmetkucukoglu ahmetkucukoglu

      Merhaba,

      Jenkins’de sol menüden Credentials sayfasına erişip “iis-credential” adında bir credentials eklemeniz gerekli. Jenkins sayfanızın sonuna aşağıdaki path’i ekleyerek ilgili sayfaya ulaşabilirsiniz.

      /credentials/store/system/domain/_/newCredentials

  6. eren eren

    teşekkürler

  7. Emre Emre

    Merhaba,

    .NET 5 (Core) için bu süreci çalıştırmak istiyorum. Aşağıdaki gibi son adıma kadar geldim fakat son adımda IIS üzerine deploy işlemini gerçekleştiremiyorum. Sizin örneğinize denk geldim. Son adımdaki işlemi uygulamak istedim fakat bahsettiğiniz iicredential ekleme seçeneğinin detayını anlamış değilim. Tür seçenekleri içerisinde IIS ile ilgili bir seçenek gelmiyor. Diğer seçeneklerden birini seçsek bile bilgilere neyi gireceğiz. IIS sunucusunun administrator bilgilerine mi ihtiyaç duyuyoruz bu aşamada?

    Geldiğim son aşama eksik hali.

    pipeline {
    agent any
    environment {
    dotnet = ‘C:\\Program Files\\dotnet\\dotnet.exe’
    }
    stages {
    stage(‘Checkout’) {
    steps {
    git credentialsId: ‘CLIENT_ID’, url: ‘GIT_PROJECT_URL’, branch: ‘master’
    }
    }
    stage(‘Clean’) {
    steps {
    bat ‘dotnet clean’
    }
    }
    stage(‘Build’) {
    steps {
    bat ‘dotnet build –configuration Release’
    }
    }
    }
    }

    • ahmetkucukoglu ahmetkucukoglu

      Merhaba,

      Deployment, Jenkins makinesinden IIS makinesine msdeploy aracılığıyla yapılıyor. Doğal olarak IIS makinesine deployment yapacak bir kullanıcı bilgisine ihtiyaç duyuluyor. Yani IIS makinesine erişebilen bir kullanıcı bilgisi. Bu kullanıcı bilgilerini Jenkins’e credential olarak tanımlayıp, pipeline’da id’sini belirtmek gerekli.

      Jenkins’de sol menüden Credentials sayfasına erişip “xxx” adında bir credentials eklemeniz gerekli. Jenkins sayfanızın sonuna aşağıdaki path’i ekleyerek ilgili sayfaya ulaşabilirsiniz.

      /credentials/store/system/domain/_/newCredentials

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.