Jenkins untuk mengotomatiskan penerapan aplikasi ASP.NET

13

Apakah ada kemungkinan untuk mengotomatiskan / semi-otomatis penyebaran aplikasi web ASP.NET menggunakan Jenkins. Itu dapat berada di bawah lingkungan yang terkendali atau tidak terkendali, untuk pengguna yang tidak terkontrol perlu memasukkan userid dan kata sandi. Saya mencari cara untuk menyalin file dari target ke tujuan dan menjalankan skrip sql dalam skenario web farm.

Sunting Saat ini kami menggunakan file bat untuk xcopy / mengkonfigurasi kumpulan aplikasi / sql cmd, dll untuk menyebarkan aplikasi. Tetapi agar ini berfungsi, tim pendukung produksi perlu mengunduh kode sumber, membangun proyek, dan menjalankan file kelelawar untuk menyebarkan aplikasi.

Sekarang, kami ingin mengotomatiskan penyebaran tanpa pengguna mengunduh kode sumber dan pengguna akhir hanya perlu mengunjungi url dan mengisi parameter userid dan kata sandi dan pilih tag svn dan itu harus digunakan. Tapi Jenkins berjalan di bawah login anonim, jadi file bat yang ada tidak akan berfungsi karena tidak memiliki izin untuk menjalankan skrip.

Jadi, saya ingin tahu apakah ada alternatif untuk situasi seperti ini. Akan lebih baik jika konteks pengguna ditiru dengan menggunakan userid dan kata sandi yang dimasukkan memungkinkan file batch yang ada untuk berjalan tanpa perubahan lebih lanjut. Jika tidak memungkinkan, kami juga ingin menjelajahi ide-ide lain tetapi kami tidak memiliki fleksibilitas untuk memilih alat otomatis seperti boneka, dll., Kami harus tetap menggunakan file batch ini.

Cerah
sumber
Berbagi penelitian Anda membantu semua orang. Beri tahu kami apa yang telah Anda coba dan mengapa itu tidak memenuhi kebutuhan Anda. Ini menunjukkan bahwa Anda telah meluangkan waktu untuk mencoba membantu diri sendiri, itu menyelamatkan kami dari mengulangi jawaban yang jelas, dan yang paling utama itu membantu Anda mendapatkan jawaban yang lebih spesifik dan relevan. Lihat juga Cara Meminta
nyamuk
Perbarui pertanyaan saya, beri tahu saya jika saya perlu memberikan informasi tambahan.
Sunny

Jawaban:

11

Saya akan membagikan apa yang telah kami gunakan, dan ke mana kami berencana pergi, mungkin itu akan membantu memberi Anda ide yang lebih baik.

  • Kami saat ini menggunakan Jenkins dan Github bersama-sama - setelah sesuatu digabungkan menjadi master, Github memberitahu Jenkins dan itu memulai membangun.
  • Kami menggunakan skrip Nant pada Jenkins untuk membangun proyek, menjalankan tes unit, dan jika semuanya terlihat baik, itu akan memulai proyek Jenkins lain. Skrip Nant juga meludahkan direktori dengan kode yang sepenuhnya dikompilasi / diminimalkan CSS / JS, dll.
  • Proyek Jenkins sekunder mengambil output dari build, dan mengirimkannya kembali ke Github, pada repositori terpisah.
  • File .BAT berjalan setiap 5 menit pada server web staging, dan pada dasarnya memeriksa pembaruan untuk repositori itu. Jika pembaruan ditemukan, kami mengunduh versi terbaru, mencadangkan file pementasan kami, lalu menyebarkan versi terbaru ke folder pementasan.
  • Untuk ditayangkan, kami memiliki file .BAT yang menangani pencadangan file langsung, dan menyalin file repositori di atas file langsung. Ini dijalankan secara manual. Itu tidak menangani pembaruan SQL (kami melakukannya dengan tangan).

Sekarang, jelas ini tidak sepenuhnya ideal tetapi ini bekerja untuk kita. Kami ingin memperluas ini di masa depan ke:

  • Gunakan Web Deploy untuk mendorong file dari Jenkins langsung ke IIS, dan lakukan perintah lain yang perlu kita jalankan.
  • Gunakan migrasi otomatis (fitur Entity Framework) untuk menangani semua pembaruan SQL, sebagai bagian dari go live.
Nicholas
sumber
Hampir sama dengan apa yang kita ikuti. Tapi, saya bertanya-tanya apakah Web Deploy dapat menginstal layanan windows, dll. Dan semua yang diperlukan untuk aplikasi web yang kompleks. Saat ini, kami menggunakan alat ps dan berfungsi dengan baik. Untuk DB, kami berencana untuk menggunakan alat DeployDB.
Sunny
Bagaimana Anda menangani situasi ketika IIS mengunci file? Bagaimana Anda menangani situasi ketika seseorang bekerja dengan aplikasi Anda. Apakah Anda memiliki banyak node atau hanya memecah aplikasi untuk pengguna yang bekerja pada saat publikasi?
Piotr Perak
1
@Peri - Saya lupa menyebutkan jawaban asli saya, tetapi kami berencana memiliki dua server produksi, dan membalik di antara mereka ketika diperlukan (menggunakan IIS atau nginx). Ini akan memungkinkan kita "menghangatkan" server langsung lainnya ketika penyebaran terjadi, dan kemudian beralih ke itu, sehingga seharusnya tidak ada downtime yang nyata.
Nicholas
4

Saya sudah menggunakan Jenkins untuk aplikasi .Net dan TFS.

  1. Tambahkan konfigurasi yang diperlukan dalam proyek Anda dan transformasi & check-in kode.
  2. Dapatkan yang terbaru dari TFS (gunakan TFS Plug-in)
  3. Bangun Proyek (gunakan MSBuild Plug-in). Anda dapat menerbitkan kode dari Msbuild menggunakan argumen baris perintah.
  4. Sinkronkan kode dari publikasikan lokasi ke tujuan menggunakan perintah msdeploy.exe (terletak di "C: \ Program Files (x86) \ IIS \ Microsoft Web Deploy V2 \ msdeploy.exe")
  5. Anda dapat mengirim email dan melakukan backup melalui Jenkins juga.

Anda juga dapat menggunakan MSTest.exe untuk menjalankan unit test dan menunjukkannya di jenkin console atau mempublikasikan hasil tes juga.

Sanjeev Kumar
sumber