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

25.03.2022 | dakika okuma

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.

How to Install Jenkins on Windows | BlazeMeter

Learn to install Jenkins with this easy guide. This tutorial will take you step by step to installing the Jenkins CI server on Windows. Start automating today.

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.

Git - Downloading Package

You are downloading the latest (2.23.0) 32-bit version of Git for Windows. This is the most recent maintained build. It was released about 2 months ago, on 2019-08-17.

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.

Download .NET (Linux, macOS, and Windows)

Free downloads for building and running .NET apps on Linux, macOS, and Windows. Runtimes, SDKs, and developer packs for .NET Framework, .NET Core, and ASP.NET.

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.

Web Deploy 3.6 : The Official Microsoft IIS Site

Web Deploy (msdeploy) simplifies deployment of Web applications and Web sites to IIS servers. Administrators can use Web Deploy to synchronize IIS servers or to migrate to newer versions of IIS. We...

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.

Web Deploy 3.6 : The Official Microsoft IIS Site

Web Deploy (msdeploy) simplifies deployment of Web applications and Web sites to IIS servers. Administrators can use Web Deploy to synchronize IIS servers or to migrate to newer versions of IIS. We...

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.

Yazıyı Paylaş

Yorumlar

Emre
3 yıl önce
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'
}
}
}
}
Yanıtla
ahmetkucukoglu
3 yıl önce
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
Yanıtla
eren
3 yıl önce
teşekkürler
Yanıtla
eren
3 yıl önce
merhaba ,

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

Could not find credentials entry with ID 'iis-credential'
Yanıtla
ahmetkucukoglu
3 yıl önce
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
Yanıtla
eren ekinci
3 yıl önce
Merhaba ,
IIS server kullanıcı adı ve şifreyi nereye giriyoruz
Yanıtla
Aykut Asil
3 yıl önce
Elinize emeğinize sağlık. Çok teşekkürler :)
Yanıtla
Fatih Çengel
4 yıl önce
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.
Yanıtla
ahmetkucukoglu
4 yıl önce
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.
Yanıtla
Hasan Hasanov
4 yıl önce
Merhabalar Ahmet bey, elinize sağlık güzel ve yararlı bir makale olmuş.
Yanıtla
ahmetkucukoglu
4 yıl önce
Eyvallah Hasan. Teşekkür ederim.
Yanıtla
Pınar
1 yıl önce
Merhaba. .net projemi publish etmek istiyorum. Agent olarak farklı bir makine de çalıştırıyorum pipeline ı. Server içinde publish edebilmeme rağmen job çalışınca dotnet:command not found hatası veriyor. Hem jenkins hem de agent olarak kullandığım makinede sdk yüklü
Yanıtla
1 yıl önce
Merhaba,

Jenkins'in kurulu olduğu windows kullanıcısı ile dotnet sdk'nın kurulu olduğu windows kullanıcısı farklı olabilir mi? Örneğin Jenkins administrator kullanıcısında kurulu olup dotnet sdk Ahmet kullanıcısında kurulu olabilir. Böyle bir durumda pipeline build yaptığınızda dotnet komutu bulunamaz.
Yanıtla

Yorum bırak

Yanıtla

Yanıtlamayı iptal et
Bu site reCAPTCHA tarafından korunmaktadır ve Google Gizlilik Politikası ve Hizmet Şartları geçerlidir. Yorumunuz başarılı şekilde gönderildi reCaptcha doğrulanamadı
Muhabbetle ASP.NET Core ile geliştirildi.