Bagaimana Anda memperbarui situs web langsung dengan perubahan kode?

21

Saya tahu ini adalah pertanyaan yang sangat mendasar. Jika seseorang bisa membuat saya humor dan memberi tahu saya bagaimana mereka akan menangani ini, saya akan sangat berterima kasih.

Saya memutuskan untuk memposting ini karena saya akan menginstal SynchToy untuk memperbaiki masalah di bawah ini, dan saya merasa sedikit tidak profesional menggunakan "Toy" tetapi saya tidak bisa memikirkan cara yang lebih baik.

Sering kali saya temukan ketika saya berada dalam situasi ini, saya kehilangan beberapa cara yang jelas menyakitkan untuk melakukan sesuatu - ini berasal dari menjadi satu-satunya pengembang di perusahaan.

  • Aplikasi web ASP.NET dikembangkan di komputer saya di tempat kerja
  • Solusi memiliki 2 proyek:
    • Situs web (file)
    • WebsiteLib (C # / dll)
  • Menggunakan repositori Git
  • Digunakan di server web GoGrid 2008R2

Penyebaran:

  1. Buat perubahan kode.
  2. Tekan untuk Git.
  3. Remote desktop ke server.
  4. Tarik dari Git.
  5. Timpa file langsung dengan menyeret / menjatuhkan dengan windows explorer.

Pada Langkah 5 saya menghapus semua file dari root situs web .. ini tidak bisa menjadi hal yang baik untuk dilakukan. Itu sebabnya saya akan menginstal SynchToy ...

UPDATE: TERIMA KASIH untuk semua tanggapan yang berguna. Saya tidak dapat memilih jawaban mana yang akan ditandai - antara menggunakan penyebaran web - sepertinya saya memiliki beberapa pengguna yang bermanfaat:

  1. Proyek Web = seluruh situs yang dikemas dalam satu DLL - downside bagi saya Saya tidak bisa mendorong pembaruan sederhana - menjadi pengembang tunggal di perusahaan 50, ini tetap sesuatu yang lebih sederhana di kali.
  2. Menarik langsung dari SCM ke root situs web - saya awalnya tidak melakukan ini karena takut bahwa direktori tersembunyi SCM saya mungkin akan terpapar, tetapi jawaban di sini membantu saya mengatasi itu (walaupun saya masih tidak suka memilikinya) lebih banyak hal yang perlu dikhawatirkan dari lupa untuk memastikan masih benar dari waktu ke waktu)
  3. Menggunakan web farm, dan secara sistematis disebarkan ke node - ini adalah solusi ideal untuk zero downtime, yang sebenarnya adalah sesuatu yang saya pedulikan karena situs ini pada dasarnya adalah sumber pendapatan real time untuk perusahaan saya - saya mungkin kesulitan meyakinkan mereka untuk dua kali lipat biaya server.

-> akhirnya, penegakan kembali prinsip dasar bahwa perlu ada penyebaran klik tunggal untuk situs ATAU LAGI SESUATU YANG SALAH mungkin adalah hal yang paling berguna yang saya dapatkan dari jawaban.

UPDATE 2: Saya pikir saya kembali ke ini dan memperbarui dengan solusi aktual yang sudah ada selama berbulan-bulan sekarang dan bekerja dengan sempurna (untuk solusi server web tunggal saya).

Proses yang saya gunakan adalah:

  1. Buat perubahan kode
  2. Tekan untuk Git
  3. Remote desktop ke server
  4. Tarik dari Git
  5. Jalankan skrip kumpulan berikut:

    cd C: \ Users \ Administrator

    % systemroot% \ system32 \ inetsrv \ appcmd.exe menghentikan situs "/site.name:Default Web Site"

    robocopy Documents \ code \ da \ 1 \ work \ Tree \ LendingTreeWebSite1 c: \ inetpub \ wwwroot / E / XF koneksiconfig Web.config

    % systemroot% \ system32 \ inetsrv \ appcmd.exe situs awal "/site.name:Default Web Site"

Seperti yang Anda lihat ini membuat situs turun, gunakan robocopy untuk secara cerdas menyalin file yang telah berubah kemudian membawa situs kembali. Biasanya berjalan dalam waktu kurang dari 2 detik. Karena lalu lintas puncak di situs ini sekitar 2 permintaan per detik, tidak ada 4 permintaan per pembaruan situs dapat diterima.

Karena saya sudah semakin mahir dengan Git, saya telah menemukan bahwa empat langkah pertama di atas menjadi "proses manual" juga dapat diterima, meskipun saya yakin saya bisa menggulung semuanya menjadi satu klik jika saya mau.

Dokumentasi untuk AppCmd.exe ada di sini . Dokumentasi untuk Robocopy ada di sini .

Aaron Anodide
sumber
6
Lebih cocok untuk serverfault.
Karl Bielefeldt
Anda harus mempertimbangkan SSHing ke server Anda alih-alih menggunakan desktop jarak jauh, dengan begitu Anda bisa membuat skrip penyebaran jika Anda mau.
Malfist
5
Saya pikir pertanyaan ini boleh tinggal di sini. Menerapkan sebuah situs web bagi saya sepertinya lebih merupakan masalah pengembang daripada pekerjaan sysadmin, meskipun saya rasa itu bisa berbeda di setiap perusahaan. Namun, semua jawaban sejauh ini berfokus pada pengembang.
Adam Lear
1
@Malfist - bagaimana tepatnya seseorang ssh menjadi server windows?
Wyatt Barnett
@ Wyatt Dengan menjalankan server SSH pada mesin jarak jauh, (hampir) sama dengan yang Anda lakukan pada kotak Linux.
Adam Lear

Jawaban:

3

Anda harus memeriksa penggunaan web VS 2010. Jika GoGrid mendukungnya, paket penerapan web adalah solusi yang baik.

http://weblogs.asp.net/scottgu/archive/2010/07/29/vs-2010-web-deployment.aspx

Nate
sumber
saat Anda menggunakan penyebaran web, Anda kehilangan opsi untuk perbaikan terbaru, bukan? Saya tahu ada banyak orang yang tidak ingin melakukan sesuatu di luar proses formal tetapi saya suka memiliki pilihan untuk keadaan darurat ...
Aaron Anodide
Benar, bagus. Saya tahu di perusahaan saya, kami tidak ingin orang melakukan itu, karena kami tidak dapat melacak perubahan. Untuk situs pribadi saya sangat suka memiliki opsi itu.
Nate
3

Di perusahaan saya sebelumnya, untuk menerapkan perubahan kode, kami akan mengatur penyeimbang bebanuntuk menghentikan layanan ke satu server web. Mungkin butuh 20 menit untuk sesi di server web pertama berakhir. Kami akan memperbarui kode pada server web itu dengan membuka ritsleting file penerapannya, lalu memeriksa apakah semuanya berjalan baik dengan menekan alamat IP langsung untuk server web pertama itu. Ketika kami yakin itu berfungsi dengan baik, maka kami akan mengatur load balancer untuk menekan server web yang sekarang diperbarui dan menunggu sesi berakhir pada server lain dan kemudian memperbarui yang itu (dan seterusnya sampai semuanya diperbarui). Setelah mereka periksa ok, kami akan mengatur load balancer untuk kembali melakukan tugasnya. Ini menjadi rumit ketika kami memiliki sebanyak 10 server web yang terhubung ke penyeimbang beban selama beban puncak musiman (jadi memperbarui mereka satu per satu dapat memakan waktu berjam-jam karena kami tidak dapat mematikan situs web langsung - pelanggan harus bisa mendapatkan ke situs).

Di ASP.NET, jika Anda menjatuhkan file apa pun yang dinamai App_Offline.htmke direktori root situs web, websiten itu membongkar yang akan membiarkan Anda kemudian memperbarui DLLS (dan apa pun). IIS akan menyajikan halaman berjudul "Aplikasi Offline". Ketika file dihapus, diganti nama atau dihapus, aplikasi web akan restart dan IIS akan menyajikan halaman web ke situs web itu. Inilah yang Visual Studio lakukan ketika Anda menerbitkan situs web dari dalam VS.

Tangurena
sumber
2

Biasanya yang saya lakukan adalah saya menyimpan semuanya dalam repositori SVN. Ketika saya selesai dengan beberapa perubahan, saya komit di situs dev, dan kemudian checkout pada produksi. Menyinkronkan semuanya, cepat dan mudah. Jika memeriksa terlalu merepotkan, Anda dapat mengatur Apache dengan WebDAV dan itu akan melakukannya untuk Anda.

Malfist
sumber
apakah Anda khawatir tentang hal-hal seperti direktori .svn yang menyajikan situs langsung Anda?
Aaron Anodide
Tidak juga, apache biasanya disiapkan untuk menolak akses ke folder-folder itu.
Malfist
IIS menyangkal .svn (atau .git atau .hg) secara default juga.
Wyatt Barnett
Jika pengguna jahat mendapat akses ke direktori, ia akan mendapatkan akses ke semua kode dalam keadaan jelas.
oleksii
5
Jika pengguna jahat mendapat akses ke sistem file Anda, Anda memiliki banyak hal yang perlu dikhawatirkan.
Malfist
2

Untuk setiap aplikasi web saya, saya memiliki pengaturan repositori git dengan tiga cabang. Langsung, Beta, Fitur. Langsung tentu saja adalah situs langsung. Beta adalah situs yang digunakan untuk memperbaiki bug atau untuk pengujian akhir fitur tepat sebelum implementasi. Kemudian seperti yang Anda katakan saya lakukan git push sederhana, git tarik langsung untuk menarik info masuk. Fitur digunakan untuk perangkat tambahan "versi berikutnya".

Ominus
sumber
Hal yang sama bekerja dengan hampir semua sistem kontrol sumber.
deadalnix
2

Anda mencoba menyelesaikan masalah pengiriman kontinu . Awalnya Anda akan mulai dengan langkah-langkah manual, tetapi segera Anda akan menyadari masalahnya. Ini adalah yang paling umum:

  1. Kode berfungsi pada PC Anda, tidak berfungsi pada produksi
  2. Perubahan baru memecah kode lama
  3. Perubahan tambahan akan membuatnya semakin sulit untuk diterapkan, Anda akan mendapatkan perpustakaan baru untuk dilampirkan, tambalan untuk diterapkan dll.

Lihatlah TeamCity (atau alat serupa lainnya).

oleksii
sumber
2

Gunakan skrip build and deploy otomatis

Cara terbaik untuk melakukannya adalah dengan menggunakan Script Automated Build dan Deploy seperti MsBuild atau Nant.

Alasannya adalah bahwa Anda cukup mengetik perintah 1 untuk meluncurkan situs web dan kemudian cukup mengetik perintah 1 untuk mengembalikannya. Dan jika Anda cukup teliti ini akan termasuk migrasi skema database Anda. (Migrator.Net)

Salah satu alasan utama untuk tidak menggunakan SVN atau GIT untuk menyebarkan adalah bahwa lingkungan dapat berubah antara produksi dan pementasan. Dalam skrip NANT Anda, Anda dapat membuatnya membangun file .config khusus untuk lingkungan yang Anda targetkan. Ini menyimpan lupa untuk memasukkan pengaturan konfigurasi dalam produksi.

Ini juga mengotomatiskan seluruh proses sehingga menjadi urusan satu perintah, dan sejumlah proses manual menjadi 1 proses sederhana.

Justin Shield
sumber
1

Pertama, Anda harus menggunakan proyek web. Apa perbedaan yang Anda tanyakan?

Sebuah proyek web akan menggabungkan semua file kelas C # (termasuk kode di belakang) menjadi satu DLL (lebih baik untuk keamanan, dan faktanya itu satu file untuk dipindahkan)

Kedua, Anda harus mempublikasikan aplikasi dan kemudian Anda masih dapat remote desktop, seret semua file di folder publish Anda dan cukup mengaturnya untuk menimpa (file baru akan menggantikan file lama).

Penerbitan akan meletakkan semua file yang diperlukan untuk aplikasi dalam satu folder.

Pria Muffin
sumber
1

Majikan saya saat ini menggunakan boneka . (Berikut adalah lebih banyak paket perangkat lunak yang mengatasi masalah yang sama.)

Majikan saya sebelumnya menggunakan sistem kontrol pekerjaan khusus untuk menangani penyebaran perangkat lunak, memulai ulang, dll. Bahkan jika itu tersedia, itu adalah cara yang terlalu berlebihan untuk kebutuhan Anda.

Majikan yang saya miliki sebelumnya memiliki skrip khusus untuk menyalin data dari subversi ke server dan melakukan restart bergulir.

Beberapa tempat yang saya lihat sebelumnya telah membuat file untuk mengelola penyebaran. Mereka umumnya menggunakan strategi seperti memotong setengah server web dari penyeimbang beban, menunggu, menghentikan separuh itu, mengeluarkan kode, memulai kembali, lalu membalik penyeimbang beban, menunggu, menghentikan separuh lainnya, memulai kembali, kemudian membawa penyeimbang beban kembali naik.

Di semua tempat yang saya telah bekerja, meluncurkan kode adalah salah satu perintah, atau tidak adanya perintah tunggal diakui sebagai masalah yang harus diperbaiki.

btilly
sumber
1

Biasanya apa yang kami gunakan untuk menyelesaikan masalah ini dengan situs web kami adalah alat yang disertakan dengan Sistem Internal yang disebut persimpangan.

Dengan menggunakan alat ini, kami dapat membuat tautan dari satu direktori ke direktori lainnya. Root aplikasi di server berisi 3 folder. Merah, Biru, Sekarang. IIS dikonfigurasi untuk selalu melihat saat ini untuk file-file itu.

Anda bisa mengeluarkan perintah junction currentyang akan memberi tahu Anda apa folder saat ini diarahkan. Katakan misalnya bahwa saat ini menunjuk ke Blue. Apa yang akan kita lakukan adalah mengantri file dalam warna Merah untuk penyebaran baru dan memastikan semua konfigurasi siap untuk digunakan.

Setelah kita siap, kita dapat mengeluarkan perintah junction current reduntuk mengembalikannya.

Ada dua hal yang membuat solusi ini begitu hebat

1) Anda memiliki semua waktu di dunia untuk mengantri perubahan Anda di folder. Tidak terburu-buru dan satu-satunya waktu istirahat adalah saat kumpulan aplikasi berputar. (Ada cara untuk melakukan pre-compile langkah ini juga.)

2) Jika ada yang salah dengan penyebaran Anda, yang harus Anda lakukan untuk mengembalikannya adalah mengeluarkan perintah alih-alih mencoba mengembalikan perubahan. Perintah dalam kasus kami adalahjunction current blue

Semoga cara kami melakukan berbagai hal dapat memberi solusi baru bagi Anda.

Mike
sumber
0

Apa yang telah saya lakukan dan saya tidak yakin apakah Anda memiliki ruang untuk ini, tapi begini saja. Pengembang akan memeriksa kode ke cabang QA, kemudian akan dimuat ke lingkungan QA oleh seorang insinyur sistem, setelah melewati QA, kode itu akan dipromosikan ke cabang produksi. Setidaknya ada 2 dari setiap situs yang terhubung ke server pada peluang penyeimbang beban dan bahkan dalam kasus ini, salah satu dari dua server akan diambil offline. Iis akan dihentikan situs akan diarsipkan dan situs baru akan digunakan bersama dengan setiap perubahan iis diperlukan iis kemudian akan dimulai kembali dan Anda kemudian akan pindah ke server berikutnya. Ini semua ditulis menggunakan C # dalam kasus kami, tetapi itu dilakukan di masa lalu menggunakan skrip vb. Saya harap itu membantu. Tepuk tangan

Alos
sumber