Kami baru-baru ini meningkatkan Situs Web ASP.NET kami ke Aplikasi Web dan kami dikejutkan oleh lompatan tiba-tiba dalam kesulitan saat menempatkannya. Mempertimbangkan seberapa umum tugas ini, saya bertanya-tanya apa plug-in / software yang digunakan orang untuk menyebarkan proyek yang berkembang, disimpan dari jarak jauh (mis. Sebuah situs web)?
Pasti ada cara yang lebih baik daripada hanya "Penerbitan" di Visual Studio dan kemudian harus secara manual FTP file yang telah berubah? Paling tidak karena situs turun ketika kita mengunggah .DLL kami.
Ada begitu banyak pengecualian file fiddly sehingga saya harus mengotomatiskan proses sebanyak mungkin, untuk mencegah unggahan yang tidak disengaja.
Dengan solusi lama kami (di WebSite kami) kami menggunakan Pengiriman untuk ASP yang benar-benar mengguncang dan membuat seluruh proses satu klik. Sayangnya itu tidak bagus untuk DLL (seperti yang disebutkan sebelumnya).
Jadi bagaimana tim Anda melakukannya?
Terima kasih atas sarannya.
PS - Saya pernah membaca bahwa Visual Studio 2010 seharusnya mengatasi kekurangan ini dalam VS2005 / 08, tetapi sampai saat itu ...
sumber
Jawaban:
Saya akan sangat menyarankan menggunakan Integrasi Berkelanjutan.
Kami menggunakan kombinasi TeamCity untuk CI, Rake dan Albacore untuk mengotomatisasi pembuatan.
TeamCity akan memeriksa kode dari repositori kode sumber Anda, kemudian, menggunakan Rake, membangun aplikasi, menjalankan tes unit dan bahkan menjalankan skrip database Anda jika Anda menginginkannya. Setelah pembangunan yang berhasil, Anda dapat mengemas kode sumber Anda dalam file zip atau menyalinnya ke tujuan pilihan Anda.
Kami menggunakan Git, meskipun TeamCity bekerja dengan semua sistem kontrol sumber.
Menggunakan TeamCity dan Rake akan mirip dengan menggunakan CruiseControl dan NANT, tanpa mengedit file XML. Tentu saja, Anda dapat menggunakan TeamCity dengan NANT jika Anda mau.
Sampel pendek ditarik dari rakefile.rb yang melakukan build. IMHO, lebih mudah dibaca dan di-debug daripada file XML.
Albacore adalah rangkaian tugas Rake yang dibuat khusus untuk menyebarkan aplikasi .NET.
sumber
Di Linux, saya telah menggunakan fabric (fabfile.org) dan capistrano (capify.org) yang merupakan alat otomatisasi untuk membantu perintah SSH dan SCP jarak jauh. Jika Anda telah menginstal Cygwin di host windows Anda, Anda harus dapat menggunakan kembali ini sebagai alat penyebaran.
sumber
"Menerbitkan" aplikasi web di Visual Studio dapat dijalankan dari baris perintah sebagai
msbuild "C:\proj\yourprojectpathandfilename.csproj" /deploydir:"C:\some\deploy\dir"
. Direktori tujuan adalah aplikasi web yang dapat digunakan.Jawaban lain yang mencakup pertanyaan Anda yang lebih besar adalah baik. Saya juga menambahkan bahwa Anda harus melihat beberapa proyek aplikasi web sumber terbuka dan menyalin proses pembuatan yang paling Anda sukai.
sumber
Saya setuju dengan Scott bahwa ini bisa sangat rumit dan mudah diabaikan. Strategi penyebaran juga sangat spesifik untuk aplikasi. Jika aplikasi Anda benar-benar mandiri dalam satu folder, mungkin lebih mudah daripada aplikasi yang mereferensikan GAC. Yang pada gilirannya mungkin masih lebih mudah daripada server yang perlu mempertahankan beberapa versi aplikasi yang mereferensikan banyak versi rakitan GAC. Kami tidak ingin memulai berbicara tentang file kebijakan di sini :).
Setelah mengatakan semua yang menggabungkan Alat Penerapan Web Microsoft dengan Routing Permintaan Aplikasi adalah salah satu pilihan yang baik. Di IIS7, dimungkinkan untuk membuat paket instalasi menggunakan alat ini. Dimungkinkan juga untuk mengarahkan alat ke aplikasi web dan mencadangkan seluruh aplikasi ke dalam folder arsip aplikasi. Anda kemudian dapat menggunakan dari folder arsip ini ke IIS6 atau server web IIS7 (IIS5 tidak didukung). Saya akan menggunakan perutean permintaan aplikasi seperti yang disarankan Scott untuk memisahkan langsung dari situs web pengujian. Setelah memverifikasi situs web yang baru diterbitkan itu baik, Anda dapat mengatur ARR untuk merutekan ke versi yang baru.
sumber
PyroBatchFTP berfungsi dengan baik untuk ini. Ini akan mendorong hanya perubahan dan Anda bisa skrip sehingga Anda bisa mendorong dengan mengklik dua kali file batch.
Di Vaasnet, kami telah menyiapkan solusi impian untuk diri kami sendiri, tetapi cukup melibatkan pengaturan tetapi layak menggunakan beberapa atau semua elemen ini jika Anda bisa. Inilah dia:
Jadi hasil bersihnya memungkinkan kita untuk memeriksa SVN dan membuatnya secara otomatis membangun dan mendorong produksi tanpa interaksi manual. Setelah kami menguji URL pementasan kami dan menentukan bahwa itu siap untuk ditayangkan, kami masuk ke situs sederhana dan dengan 1 klik, itu langsung.
sumber
Untuk cara lain yang belum disarankan, saya merujuk Anda ke 'Gu' dan Proyek Pengaturan Web
Ini pada dasarnya membuat installer MSI untuk aplikasi .NET Anda. Contoh ini untuk VS2005, tapi saya punya VS2010 dan jenis proyek masih ada. Ini dapat memberi Anda banyak penyesuaian jika Anda membutuhkannya, atau hanya instalasi dasar jika Anda tidak membutuhkannya.
Secara pribadi di mana saya bekerja, kami hanya melakukan penyebaran gaya xcopy, tapi saya akhirnya ingin hanya menyerahkan paket ke grup server, memberi mereka kontrol kapan dan bagaimana itu dikerahkan. (Saya pikir ini mungkin juga membuatnya lebih mudah untuk melakukan penyebaran massal menggunakan sesuatu seperti kebijakan kelompok, tapi saya tidak terlalu terbiasa dengan itu)
sumber
Ada banyak cara untuk menguliti kucing ini, sangat tergantung pada seberapa banyak akses yang dapat Anda miliki di server Anda. Metode favorit pribadi saya akhir-akhir ini adalah menyiapkan skrip pembuatan dalam proyek (biasanya menggunakan MSBUILD) yang mengemas semua file penempatan, kemudian menggunakan SVN untuk menjembatani mereka menjadi produksi. Dan untuk versi file produksi.
Dari sisi database, cara terbaik adalah menggunakan semacam kerangka migrasi. Sekali lagi, banyak dari mereka yang berkeliaran dan tidak ada jawaban yang jelas.
sumber
Secara pribadi saya hanya menggunakan skrip vbs yang saya tulis sendiri untuk menyalin folder dari tipe file tertentu ke server dev (yaitu meninggalkan file cs, dll).
sumber
Ketika saya bekerja di sebuah perusahaan besar .com, inilah yang kami lakukan dengan penggunaan .net.
Semua kode sumber dan prosedur tersimpan kami disimpan di SVN. Setiap malam, pekerjaan database menjalankan dan menarik procs yang tersimpan produksi dan menyelipkannya ke direktori di SVN sehingga selalu ada versi terbaru dalam kontrol sumber.
Pada hari penyebaran untuk suatu proyek, kami akan menggunakan skrip nAnt untuk menarik proyek dari SVN, melakukan pembuatan kustom proyek dan menarik setiap ketergantungan yang dibutuhkan oleh proyek-proyek ini. Setelah skrip nAnt dijalankan, paket tersebut dikemas menjadi file zip yang dapat diekstraksi sendiri. Procs tersimpan yang terkait dengan penyebaran ini diperiksa ke dalam kontrol sumber dan lembar spreed excel diperbarui dengan skrip untuk menjalankan dan dalam urutan yang mana.
Ketika deploymenet berbunyi, file zip yang mengekstraksi sendiri dipindahkan ke server tempat diluncurkan. Semua file diekstraksi ke direktori yang benar dan DBA menjalankan procs yang tersimpan pada basis data prodcution.
Pada penyebaran yang umum menggunakan sistem ini, kami beralih dari penyebaran lima hingga enam jam menjadi kurang dari satu jam atau kurang.
Selamat mencoba dan berharap ini membantu beberapa orang dalam mencari cara untuk menggunakan aplikasi Anda.
sumber
Pisau cukur Occam biasanya merupakan pendekatan yang disukai: semakin sederhana, semakin baik. FTP mudah dengan sedikit atau tanpa komplikasi. Beberapa orang menggunakan XCOPY, Filezilla atau WSFTP, yang lain mungkin menggunakan MS Web Deployment Tool (yang saya belum kenal), tetapi secara keseluruhan, ada cara yang lebih baik untuk menggunakan aplikasi web ASP.NET (dan lainnya aplikasi secara umum). IMO, jika penyebaran dipertimbangkan dari awal pengembangan, penyebaran bisa diintegrasikan dengan aplikasi web yang membuat penyebaran yang relatif bebas rasa sakit dan lancar di masa depan.
Sebagai pengembang .NET yang telah bekerja di beberapa perusahaan yang mengembangkan aplikasi web ASP.NET mulai dari ukuran, kompleksitas, dan jumlah pengguna (dari beberapa ratus pengguna hingga puluhan ribu), 'penyebaran' IMO sering kali merupakan topik paling "cair". Beberapa organisasi mengambil terlalu jauh dalam hal birokrasi sementara yang lain tidak menangani masalah dengan penyebaran sama sekali. Dalam pengalaman saya, masalah dengan penyebaran cenderung masuk ke dalam 1 atau lebih dari 3 kategori dalam hal kesulitan / kegagalan:
Penempatan diabaikan / dilupakan secara mendalam selama fase desain: Sebagian besar aplikasi web cenderung menggabungkan server web dan database. Di luar kode aplikasi, mungkin beberapa prosedur tersimpan dan tabel database, penyebaran tidak perlu banyak dipikirkan. ASP.NET lebih dari mampu membantu dalam penyebaran tetapi paling sering pengembang terganggu dalam hal menjalankan aplikasi yang sebenarnya dan melakukan tugasnya sambil meninggalkan bagaimana penyebaran sebagai masalah yang terpisah.
Penempatannya rumit di banyak sistem dan orang yang bermain: Kompleksitas itu menyebalkan. Dari MSMQ, prosedur dan pemicu tersimpan T-SQL, Layanan Pelaporan, pesan SOAP / XML, otentikasi AD, SSAS / SSIS, dll. Jumlah teknologi yang dimainkan meningkatkan jumlah orang yang terlibat. Yang terburuk, semua komponen yang berbeda ini biasanya dikelola oleh entitas yang berbeda dalam suatu organisasi. Kecuali setiap orang sinkron satu sama lain, penerapan dapat meningkatkan kompleksitas dengan cepat yang mengarah ke beberapa titik kegagalan.
Kemalasan, apatis atau kurangnya komunikasi dan / atau manajemen: Dari sedikit hingga tidak ada dokumentasi hingga kurangnya komunikasi dan protokol yang terkoordinasi, mudah untuk mengacaukan proses yang relatif sederhana. Penempatan harus menjadi prosedur sederhana dengan banyak pemeriksaan di tempat sambil mendokumentasikan apa yang sudah dilakukan, tetapi seringkali tidak pernah demikian. Kebanyakan orang hanya ingin situs sialan itu berjalan. Dalam pengalaman saya, orang-orang (non-programmer) tidak terlalu peduli sampai sesuatu berjalan sangat fubar. Tanggung jawab jarang jatuh pada hanya satu orang untuk benar - benar melakukan penempatan karena tidak ada yang benar-benar ingin menjadi alasan kegagalan sehingga akuntabilitas biasanya dibubarkan.
Saya tidak tahu ada vendor untuk mengotomatiskan penyebaran meskipun saya tidak akan terkejut jika ada beberapa. Anda mungkin dapat membuat skrip solusi melalui VBScript / WMI atau skrip batch solusi, tetapi kenyataannya adalah Anda perlu menyesuaikan solusi bersama untuk situs ASP.NET yang lebih kompleks. Situs-situs sederhana yang terdiri dari halaman, konektivitas basis data, dan tidak ada yang lain, Anda tidak perlu melakukan skala yang hampir sama dengan upaya penempatan Anda sejalan dengan kompleksitas aplikasi itu sendiri.
Sejauh ini, saat ini penyebaran pekerjaan saya masih dilakukan melalui FTP dan memindahkan banyak file. Ini jelek, mudah dikacaukan dan tidak ada rasa sejarah yang akurat. Memang Anda bisa menyisir log FTP, tidak ada yang benar-benar ingin melakukannya. Aplikasi kami cukup sederhana tanpa banyak kebutuhan di luar FTP. Bagaimana tim saya menyebarkan aplikasi web kami sangat tidak berguna bagi Anda. Sebaliknya, saya lebih suka menggunakan kesempatan ini untuk menyarankan praktik yang lebih baik .
Saya menyadari bahwa posting ini mungkin berlebihan untuk pertanyaan yang semula ditanyakan. Sayangnya, penyebaran tidak mudah karena aplikasi dapat bervariasi dalam kompleksitas. Saya berani bertaruh bahwa sebagian besar organisasi yang menggunakan aplikasi ASP.NET yang kompleks dari waktu ke waktu mengembangkan strategi tertentu pekerjaan (setidaknya) andal.
sumber