Jenkins, ASP.NET uygulamalarının dağıtımını otomatikleştirecek


13

Jenkins kullanarak ASP.NET web uygulamalarının dağıtımını otomatik / yarı otomatik hale getirme imkanı var mı? Kontrolsüz veya kontrolsüz ortamlarda olabilir, kontrolsüz kullanıcının kullanıcı kimliği ve şifre girmesi gerekir. Dosyaları hedeften hedefe kopyalamanın ve web grubu senaryosunda sql komut dosyalarını çalıştırmanın yollarını arıyorum.

Düzenle Şu anda uygulamayı dağıtmak için uygulama havuzu / sql cmd, vb. Kopyalamak / yapılandırmak için bat dosyaları kullanıyoruz. Ancak bunun çalışması için, üretim destek ekibinin kaynak kodu indirmesi, projeyi derlemesi ve uygulamayı dağıtmak için yarasa dosyalarını çalıştırması gerekir.

Şimdi, kullanıcı kaynak kodunu indirmeden dağıtımı otomatikleştirmek istiyoruz ve son kullanıcının sadece bir url'yi ziyaret etmesi ve kullanıcı kimliği ve şifre parametrelerini doldurması ve svn etiketini seçmesi gerekiyor ve konuşlandırılması gerekiyor. Ancak Jenkins anonim oturum açma altında çalışıyor, bu nedenle mevcut yarasa dosyası komut dosyasını çalıştırma izni olmadığından çalışmayacak.

Bu yüzden, bu tür bir durum için herhangi bir alternatif olup olmadığını bilmek istiyorum. Mevcut toplu iş dosyasının başka değişiklikler yapılmadan çalışmasına izin veren girilen kullanıcı kimliği ve parola kullanılarak kullanıcı bağlamının kimliğine bürünülmesi iyi olacaktır. Mümkün değilse, başka fikirleri de araştırmak istiyoruz, ancak kukla vb. Gibi otomatik bir araç seçme esnekliğimiz yok, bu toplu iş dosyalarına sadık kalmalıyız.


Araştırmanızı paylaşmak herkese yardımcı olur. Neyi denediğinizi ve neden ihtiyaçlarınızı karşılamadığını bize bildirin. Bu, kendinize yardımcı olmak için zaman ayırdığınızı gösterir, bizi açık cevapları tekrar etmekten kurtarır ve en önemlisi daha spesifik ve ilgili bir cevap almanıza yardımcı olur. Ayrıca bkz. Nasıl
Sorulur

Sorumu güncelleyin, başka bilgi vermem gerekirse lütfen bize bildirin.
Güneşli

Yanıtlar:


11

Ne kullandığımızı ve nereye gitmeyi planladığımızı paylaşacağım, belki size daha iyi bir fikir vermenize yardımcı olur.

  • Şu anda Jenkins ve Github'u birlikte kullanıyoruz - bir şey ustaya birleştirildiğinde, Github Jenkins'e söyler ve bir yapıyı başlatır.
  • Projeyi oluşturmak, birim testleri yapmak için Jenkins üzerinde Nant betiği kullanıyoruz ve her şey iyi görünüyorsa başka bir Jenkins projesini başlatıyor. Nant betiği, tam derlenmiş kod / simge durumuna küçültülmüş CSS / JS vb. İçeren bir dizin de çıkarır.
  • İkincil Jenkins projesi çıktıyı derlemeden alır ve ayrı bir depoda Github'a geri gönderir.
  • Bir .BAT dosyası hazırlama web sunucusunda her 5 dakikada bir çalışır ve temel olarak bu depodaki güncelleştirmeleri denetler. Bir güncelleme bulunursa, en son derlemeyi indirir, hazırlama dosyalarımızı yedekleriz, ardından en yeni derlemeyi hazırlama klasörüne dağıtırız.
  • Canlı yayına geçmek için, canlı dosyaları yedeklemeyi ve depo dosyalarını canlı dosyalar üzerine kopyalamayı işleyen bir .BAT dosyamız var. Manuel olarak çalıştırılır. SQL güncellemelerini işlemez (bunları elle yaparız).

Şimdi, bu tamamen ideal değil ama bizim için çalışıyor. Gelecekte bunu genişletmek istiyoruz:

  • Dosyaları Jenkins'ten doğrudan IIS'ye göndermek ve çalıştırmamız gereken diğer komutları yapmak için Web Dağıtımı'nı kullanın .
  • Canlı yayının bir parçası olarak tüm SQL güncellemelerini işlemek için otomatik geçişleri (Entity Framework'ün bir özelliği) kullanın.

Neyi takip ettiğimiz neredeyse aynı. Ancak, Web Dağıtım'ın Windows hizmetlerini vb. Yükleyip yükleyemeyeceğini ve karmaşık web uygulamaları için gerekli olan her şeyi merak edebildim. Şu anda ps araçları ve iyi çalışıyor. DB için, DeployDB aracını kullanmayı planlıyoruz.
Güneşli

IIS dosyaları kilitlerken durumları nasıl ele alırsınız? Birisi uygulamanızla çalışırken durumları nasıl ele alırsınız? Birden fazla düğümünüz var mı veya yayınlama sırasında çalışan kullanıcılar için yalnızca mola başvurunuz mu var?
Piotr Perak

1
@Peri - Orijinal cevabımda bahsetmeyi unuttum, ancak iki üretim sunucusuna sahip olmayı ve gerektiğinde (IIS veya nginx kullanarak) aralarında geçiş yapmayı planlıyoruz. Bu, konuşlandırma gerçekleştiğinde diğer canlı sunucuyu "ısıtmamıza" ve ardından ona geçmemize izin verir, bu nedenle belirgin bir kesinti olmamalıdır.
Nicholas

4

Zaten Jenkins .Net uygulamaları ve TFS için kullanıyorum.

  1. Projenize gerekli yapılandırmayı ekleyin ve dönüşümü ve kodu check-in yapın.
  2. TFS'den en son haberleri alın (TFS Eklentisini kullanın)
  3. Projeyi derleyin (MSBuild Eklentisini kullanın). Komut satırı bağımsız değişkenlerini kullanarak kodu Msbuild'den yayımlayabilirsiniz.
  4. Kodu msdeploy.exe komutunu kullanarak yayınlama konumundan hedefe senkronize etme ("C: \ Program Files (x86) \ IIS \ Microsoft Web Dağıtımı V2 \ msdeploy.exe" adresinde bulunur)
  5. Jenkins ile e-posta gönderebilir ve yedeklemeyi yapabilirsiniz.

Birim testini yürütmek ve bunu jenkin konsolunda göstermek veya test sonucunu da yayınlamak için MSTest.exe aracını da kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.