คุณจะอัพเดตเว็บไซต์สดด้วยการเปลี่ยนรหัสได้อย่างไร


21

ฉันรู้ว่านี่เป็นคำถามพื้นฐานมาก หากมีใครสามารถตลกฉันและบอกฉันว่าพวกเขาจะจัดการกับเรื่องนี้ฉันจะยิ่งใหญ่

ฉันตัดสินใจที่จะโพสต์สิ่งนี้เพราะฉันกำลังจะติดตั้ง SynchToy เพื่อแก้ไขปัญหาด้านล่างและฉันรู้สึกไม่เป็นมืออาชีพเล็กน้อยเมื่อใช้ "ของเล่น" แต่ฉันไม่คิดว่าจะดีไปกว่านี้

หลายครั้งที่ฉันพบว่าเมื่อฉันอยู่ในสถานการณ์นี้ฉันพลาดวิธีที่ชัดเจนในการทำสิ่งต่าง ๆ - มาจากการเป็นนักพัฒนาเพียงคนเดียวใน บริษัท

  • แอปพลิเคชันเว็บ ASP.NET ที่พัฒนาบนคอมพิวเตอร์ของฉันในที่ทำงาน
  • โซลูชันมี 2 โครงการ:
    • เว็บไซต์ (ไฟล์)
    • WebsiteLib (C # / dll)
  • ใช้ที่เก็บ Git
  • นำไปใช้งานบนเว็บเซิร์ฟเวอร์ GoGrid 2008R2

การใช้งาน:

  1. ทำการเปลี่ยนแปลงรหัส
  2. กดเพื่อ Git
  3. รีโมตเดสก์ท็อปไปยังเซิร์ฟเวอร์
  4. ดึงจาก Git
  5. เขียนทับไฟล์สดด้วยการลาก / วางด้วย windows explorer

ในขั้นตอนที่ 5 ฉันลบไฟล์ทั้งหมดออกจากรูทเว็บไซต์ .. นี่เป็นสิ่งที่ไม่ควรทำ นั่นเป็นเหตุผลที่ฉันกำลังจะติดตั้ง SynchToy ...

อัปเดต:ขอบคุณสำหรับคำตอบที่เป็นประโยชน์ทั้งหมด ฉันไม่สามารถเลือกคำตอบที่ต้องการได้ - ระหว่างการใช้งานเว็บ - ดูเหมือนว่าฉันมีข้อเสนอแนะที่เป็นประโยชน์หลายประการ:

  1. Web Project = ทั้งไซต์บรรจุเป็น DLL เดียว - ข้อเสียสำหรับฉันฉันไม่สามารถผลักดันการอัปเดตอย่างง่าย - ในฐานะนักพัฒนาที่โดดเดี่ยวใน บริษัท 50 นี่เป็นสิ่งที่ง่ายกว่าในบางครั้ง
  2. การดึงโดยตรงจาก SCM ไปยังเว็บรูทของเว็บไซต์ - แต่เดิมฉันไม่ได้ทำแบบนี้เพราะกลัวว่าไดเรกทอรีที่ซ่อนอยู่ของ SCM ของฉันอาจจบลงด้วยการเปิดเผย แต่คำตอบที่นี่ช่วยฉันได้มากกว่านั้น (แม้ว่าฉันยังไม่ชอบ สิ่งที่ต้องกังวลเกี่ยวกับการลืมเพื่อให้แน่ใจว่ายังคงเป็นจริงเมื่อเวลาผ่านไป)
  3. การใช้เว็บฟาร์มและการปรับใช้กับโหนดอย่างเป็นระบบ - นี่เป็นโซลูชั่นที่เหมาะสำหรับการหยุดทำงานเป็นศูนย์ซึ่งจริงๆแล้วเป็นสิ่งที่ฉันสนใจเนื่องจากไซต์นั้นเป็นแหล่งรายได้ตามเวลาจริงสำหรับ บริษัท ของฉัน - ฉันอาจมีเวลายากที่จะเชื่อใจ แม้ว่าค่าใช้จ่ายของเซิร์ฟเวอร์จะเพิ่มเป็นสองเท่า

-> ในที่สุดการบังคับใช้หลักการพื้นฐานที่ต้องมีการปรับใช้คลิกครั้งเดียวสำหรับเว็บไซต์หรืออื่น ๆ ที่มีบางอย่างผิดอาจเป็นสิ่งที่มีประโยชน์ที่สุดที่ฉันได้รับคำตอบ

อัปเดต 2:ฉันคิดว่าฉันกลับมาที่นี่และอัปเดตด้วยโซลูชันจริงที่ใช้งานมาหลายเดือนแล้วและทำงานได้อย่างสมบูรณ์แบบ (สำหรับโซลูชันเว็บเซิร์ฟเวอร์เดียวของฉัน)

กระบวนการที่ฉันใช้คือ:

  1. ทำการเปลี่ยนแปลงรหัส
  2. กดเพื่อ Git
  3. รีโมตเดสก์ท็อปไปยังเซิร์ฟเวอร์
  4. ดึงจาก Git
  5. เรียกใช้สคริปต์ชุดต่อไปนี้:

    cd C: \ Users \ Administrator

    % systemroot% \ system32 \ inetsrv \ appcmd.exe หยุดไซต์ "/site.name:Default เว็บไซต์"

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

    % systemroot% \ system32 \ inetsrv \ appcmd.exe ไซต์เริ่มต้น "/site.name:Default เว็บไซต์"

ดังที่คุณเห็นสิ่งนี้ทำให้ไซต์ล้มเหลวใช้ robocopy เพื่อคัดลอกไฟล์ที่มีการเปลี่ยนแปลงอย่างชาญฉลาดจากนั้นนำไซต์กลับมาสำรอง โดยทั่วไปแล้วจะทำงานในเวลาน้อยกว่า 2 วินาที เนื่องจากปริมาณการใช้งานสูงสุดในไซต์นี้มีประมาณ 2 คำขอต่อวินาทีจึงไม่มีคำขอ 4 รายการต่อการอัปเดตไซต์

Sine ฉันมีความเชี่ยวชาญมากขึ้นกับ Git ฉันพบว่าสี่ขั้นตอนแรกข้างต้นเป็น "กระบวนการด้วยตนเอง" ก็เป็นที่ยอมรับเช่นกันแม้ว่าฉันแน่ใจว่าฉันสามารถม้วนสิ่งทั้งหมดให้เป็นคลิกเดียวหากฉันต้องการ

เอกสารประกอบสำหรับ AppCmd.exe เป็นที่นี่ เอกสารประกอบสำหรับ Robocopy เป็นที่นี่


6
เหมาะกว่าสำหรับเซิร์ฟเวอร์ผิด
Karl Bielefeldt

คุณควรพิจารณา SSHing ในเซิร์ฟเวอร์ของคุณแทนที่จะใช้เดสก์ท็อประยะไกลด้วยวิธีที่คุณสามารถปรับใช้สคริปต์หากคุณต้องการ
Malfist

5
ฉันคิดว่าคำถามนี้ดีที่ได้พักที่นี่ การปรับใช้เว็บไซต์ดูเหมือนว่าฉันจะชอบนักพัฒนามากกว่างานดูแลระบบ แต่ฉันคิดว่ามันอาจแตกต่างกันไปตาม บริษัท ถึงกระนั้นทุกคำตอบก็ยังให้ความสำคัญกับนักพัฒนา
อดัมเลียร์

1
@ มัลลิสต์ - วิธีการอย่างใดอย่างหนึ่งไม่ ssh ลงในเซิร์ฟเวอร์ windows?
ไวแอตต์บาร์เน็ตต์

@Wyatt ด้วยการรันเซิร์ฟเวอร์ SSH บนเครื่องระยะไกล (เกือบ) เหมือนกับที่คุณทำบนกล่อง Linux
อดัมเลียร์

คำตอบ:


3

คุณควรตรวจสอบการปรับใช้เว็บของ VS 2010 ถ้า GoGrid รองรับแพ็คเกจการปรับใช้เว็บเป็นโซลูชันที่ดี

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


เมื่อคุณใช้การปรับใช้เว็บคุณจะสูญเสียตัวเลือกในการแก้ไขด่วนใช่ไหม? ฉันรู้ว่ามีคนจำนวนมากที่ไม่ต้องการทำอะไรนอกกระบวนการอย่างเป็นทางการ แต่ฉันชอบมีตัวเลือกสำหรับกรณีฉุกเฉิน ...
Aaron Anodide

คุณทำดีจุด ฉันรู้ว่าที่ บริษัท ของฉันเราไม่ต้องการให้คนอื่นทำเพราะเราไม่สามารถติดตามการเปลี่ยนแปลงได้ สำหรับเว็บไซต์ส่วนตัวฉันชอบที่จะมีตัวเลือกนั้น
เนท

3

ที่นายจ้างคนก่อนหน้าของฉันเพื่อปรับใช้การเปลี่ยนแปลงรหัสเราได้ตั้งตัวโหลดบาลานเซอร์เพื่อหยุด servinng หนึ่งเว็บเซิร์ฟเวอร์ อาจใช้เวลา 20 นาทีเพื่อให้เซสชันบนเว็บเซิร์ฟเวอร์แรกหมดอายุ เราจะอัปเดตรหัสบนเว็บเซิร์ฟเวอร์นั้นโดยการคลายไฟล์ซิปการปรับใช้จากนั้นตรวจสอบว่าสิ่งต่าง ๆ ทำงานได้ดีโดยกดที่อยู่ IP โดยตรงสำหรับเว็บเซิร์ฟเวอร์เครื่องแรก เมื่อเราเชื่อว่ามันใช้งานได้ดีเราจะตั้งค่า load balancer ให้เป็น webserver ที่อัปเดตแล้วและรอให้เซสชั่นหมดอายุบนเซิร์ฟเวอร์ตัวอื่นแล้วอัปเดตหนึ่งอัน (จนกว่าจะมีการอัพเดททั้งหมด) หลังจากที่พวกเขาเช็คเอาท์ตกลงเราจะตั้งตัวโหลดบาลานเซอร์เพื่อกลับไปทำงานของมัน สิ่งนี้มีความซับซ้อนเมื่อเรามีเว็บเซิร์ฟเวอร์มากถึง 10 เครื่องที่เชื่อมต่อกับ load balancer ในช่วงที่มีการเปลี่ยนแปลงตามฤดูกาล (ดังนั้นการอัปเดตทีละคนอาจใช้เวลาหลายชั่วโมงเพราะเราไม่สามารถปิดเว็บไซต์สดได้ - ลูกค้าต้องสามารถรับ ไปที่เว็บไซต์)

ใน ASP.NET ถ้าคุณปล่อยไฟล์ใด ๆ ที่มีชื่อApp_Offline.htmลงในไดเรกทอรีรากของเว็บไซต์ websiten นั้นจะทำการยกเลิกการโหลดซึ่งจะช่วยให้คุณอัปเดต DLLS (และอะไรก็ตาม) IIS จะแสดงหน้า "แอปพลิเคชันออฟไลน์" เมื่อไฟล์ถูกลบเปลี่ยนชื่อหรือลบเว็บแอปพลิเคชันจะเริ่มต้นใหม่และ IIS จะแสดงหน้าเว็บไปยังเว็บไซต์นั้น นี่คือสิ่งที่ Visual Studio ทำเมื่อคุณเผยแพร่เว็บไซต์จากภายใน VS


2

โดยทั่วไปสิ่งที่ฉันทำคือฉันเก็บทุกอย่างไว้ในที่เก็บ SVN เมื่อฉันทำการเปลี่ยนแปลงเสร็จสิ้นฉันจะทำที่ไซต์ dev จากนั้นทำการเช็คเอาต์ ทำให้ทุกสิ่งซิงค์กันได้อย่างรวดเร็วและง่ายดาย หากการเช็คเอาท์ยุ่งยากมากเกินไปคุณสามารถตั้งค่า Apache ด้วย WebDAV และมันจะทำเพื่อคุณ


คุณกังวลเกี่ยวกับสิ่งต่างๆเช่นไดเรกทอรี. svn ที่นำเสนอเว็บไซต์สดของคุณหรือไม่
Aaron Anodide

ไม่จริงๆ apache มักจะตั้งค่าให้ปฏิเสธการเข้าถึงโฟลเดอร์เหล่านั้น
Malfist

IIS ปฏิเสธ. svn (หรือ. git หรือ. hg) โดยค่าเริ่มต้นด้วย
ไวแอตต์บาร์เน็ตต์

หากผู้ใช้ที่เป็นอันตรายสามารถเข้าถึงไดเรกทอรีเขา / เธอจะได้รับการเข้าถึงรหัสทั้งหมดในสถานะที่ชัดเจน
oleksii

5
หากผู้ใช้ที่ประสงค์ร้ายเข้าถึงระบบไฟล์ของคุณคุณมีสิ่งที่น่ากังวลมากขึ้น
Malfist

2

สำหรับแอปพลิเคชันเว็บแต่ละรายการของฉันฉันมีการตั้งค่าที่เก็บข้อมูลคอมไพล์ด้วยสามสาขา สด, เบต้า, คุณสมบัติ สดเป็นแน่นอนเว็บไซต์สด Beta เป็นเว็บไซต์ที่ใช้แก้ไขข้อบกพร่องหรือสำหรับการทดสอบคุณสมบัติขั้นสุดท้ายก่อนนำไปใช้งาน จากนั้นก็อย่างที่คุณบอกว่าฉันทำ git ง่าย ๆ , git pull on live เพื่อดึงข้อมูลมาฟีเจอร์นี้ใช้สำหรับการปรับปรุง "เวอร์ชั่นถัดไป"


การทำงานแบบเดียวกันกับระบบควบคุมแหล่งข้อมูลเกือบทั้งหมด
deadalnix

2

คุณกำลังพยายามที่จะแก้ปัญหาของการส่งมอบอย่างต่อเนื่อง เริ่มแรกคุณจะเริ่มต้นด้วยขั้นตอนแบบแมนนวล แต่ในไม่ช้าคุณจะตระหนักถึงปัญหา สิ่งเหล่านี้เป็นสิ่งที่พบได้บ่อยที่สุด:

  1. รหัสทำงานบนพีซีของคุณไม่ทำงานในการผลิต
  2. การเปลี่ยนแปลงใหม่แบ่งรหัสเก่า
  3. การเปลี่ยนแปลงที่เพิ่มขึ้นจะทำให้การปรับใช้ยากขึ้นและยากขึ้นคุณจะได้รับไลบรารีใหม่สำหรับการแนบแพทช์เพื่อนำไปใช้ ฯลฯ

ดูTeamCity (หรือเครื่องมืออื่น ๆ ที่คล้ายกัน)


2

ใช้การสร้างและปรับใช้สคริปต์อัตโนมัติ

วิธีที่ดีที่สุดที่จะทำคือใช้ Build อัตโนมัติและปรับใช้สคริปต์เช่น MsBuild หรือ Nant

เหตุผลก็คือคุณสามารถพิมพ์คำสั่ง 1 เพื่อเผยแพร่เว็บไซต์และเพียงพิมพ์คำสั่ง 1 เพื่อย้อนกลับ และถ้าคุณถี่ถ้วนพอจะรวมการโยกย้ายสคีมาฐานข้อมูลของคุณ (Migrator.Net)

หนึ่งในเหตุผลหลักที่จะไม่ใช้ SVN หรือ GIT เพื่อปรับใช้คือสภาพแวดล้อมสามารถเปลี่ยนแปลงได้ระหว่างการผลิตและการจัดเตรียม ในสคริปต์ NANT ของคุณคุณสามารถให้มันสร้างไฟล์. config ของคุณโดยเฉพาะสำหรับสภาพแวดล้อมที่คุณกำหนดเป้าหมาย สิ่งนี้จะช่วยประหยัดการลืมป้อนการตั้งค่าคอนฟิกในการผลิต

นอกจากนี้ยังทำให้กระบวนการทั้งหมดเป็นแบบอัตโนมัติดังนั้นจึงกลายเป็นคำสั่งเดียวและกระบวนการจำนวนมากใด ๆ จะกลายเป็น 1 กระบวนการง่าย ๆ


1

ก่อนอื่นคุณควรใช้โครงการเว็บ คุณถามอะไรที่แตกต่างกัน?

โครงการเว็บจะรวมไฟล์คลาส C # ทั้งหมด (รวมรหัสไว้หลัง) เป็น DLL เดียว (ดีกว่าเพื่อความปลอดภัยและความจริงเป็นไฟล์เดียวที่จะย้าย)

อันดับที่สองคุณควรเผยแพร่แอปพลิเคชันจากนั้นคุณยังสามารถเดสก์ท็อประยะไกลลากไฟล์ทั้งหมดในโฟลเดอร์เผยแพร่ของคุณและเพียงแค่ตั้งค่าให้เขียนทับ (ไฟล์ใหม่จะแทนที่ไฟล์เก่า)

การเผยแพร่จะวางไฟล์ที่จำเป็นทั้งหมดสำหรับแอปพลิเคชันไว้ในโฟลเดอร์เดียว


1

นายจ้างปัจจุบันของฉันปรับใช้หุ่นเชิด (ต่อไปนี้เป็นแพคเกจซอฟต์แวร์เพิ่มเติมที่แก้ไขปัญหาเดียวกัน)

นายจ้างคนก่อนหน้าของฉันใช้ระบบควบคุมงานที่กำหนดเองเพื่อจัดการกับการปรับใช้ซอฟต์แวร์การรีสตาร์ทและอื่น ๆ แม้ว่าจะพร้อมใช้งาน แต่มันก็เกินความต้องการของคุณ

นายจ้างที่ฉันเคยทำมาก่อนหน้านั้นมีสคริปต์ที่กำหนดเองเพื่อคัดลอกข้อมูลจากการโค่นล้มไปยังเซิร์ฟเวอร์และทำการเริ่มการทำงานใหม่

หลายแห่งที่ฉันเคยเห็นก่อนหน้านี้เคยทำไฟล์เพื่อจัดการการปรับใช้ พวกเขามักใช้กลยุทธ์เช่นการตัด webservers ครึ่งหนึ่งจาก load balancer, รอ, หยุดครึ่งนั้น, กลิ้งรหัสออก, รีสตาร์ทพวกมัน, จากนั้นให้ทำการ load balancer, รอ, หยุดครึ่งอื่น ๆ , รีสตาร์ทพวกมันแล้วนำ load balancer กลับมา ขึ้น

ในทุกสถานที่ที่ฉันทำงานรหัสการออกเป็นทั้งคำสั่งเดียวหรือการขาดมันเป็นคำสั่งเดียวได้รับการยอมรับว่าเป็นปัญหาที่จะแก้ไข


1

โดยทั่วไปสิ่งที่เราใช้เพื่อแก้ไขปัญหานี้กับเว็บไซต์ของเราเป็นเครื่องมือที่รวมอยู่ในSystems Internals ที่เรียกว่าทางแยก

การใช้เครื่องมือนี้เราสามารถสร้างลิงก์จากไดเรกทอรีหนึ่งไปยังอีกไดเรกทอรีหนึ่งได้ รูทของแอปบนเซิร์ฟเวอร์มี 3 โฟลเดอร์ แดงน้ำเงินปัจจุบัน IIS ได้รับการกำหนดค่าให้ดูไฟล์เป็นปัจจุบันเสมอ

คุณสามารถออกคำสั่งjunction currentที่จะบอกคุณได้ว่าโฟลเดอร์ใดที่ชี้ไปในปัจจุบัน พูดเช่นว่าขณะนี้ชี้ไปที่ Blue สิ่งที่เราจะทำคือจัดคิวไฟล์ใน Red สำหรับการปรับใช้ใหม่และตรวจสอบให้แน่ใจว่าการกำหนดค่าทั้งหมดพร้อมที่จะไป

เมื่อเราพร้อมเราสามารถออกคำสั่งjunction current redเพื่อให้มันชี้ไปที่

มีสองสิ่งที่ทำให้โซลูชันนี้ยอดเยี่ยมมาก

1) คุณมีเวลาทั้งหมดในโลกที่จะจัดคิวการเปลี่ยนแปลงของคุณในโฟลเดอร์ ไม่เร่งรีบและมีเพียงช่วงเวลาเดียวเท่านั้นที่แอพพูลกำลังหมุน (มีวิธีในการคอมไพล์ขั้นตอนนี้ล่วงหน้าด้วย)

2) หากมีสิ่งผิดปกติเกิดขึ้นกับการปรับใช้ของคุณสิ่งที่คุณต้องทำเพื่อย้อนกลับคือการออกคำสั่งแทนที่จะพยายามเปลี่ยนกลับการเปลี่ยนแปลง คำสั่งในกรณีของเราจะเป็นjunction current blue

หวังว่าวิธีการของเราในการทำสิ่งต่าง ๆ จะทำให้เกิดแสงสว่างบนโซลูชันใหม่สำหรับคุณ


0

สิ่งที่ฉันได้ทำและฉันไม่แน่ใจว่าคุณมีขอบเขตสำหรับสิ่งนี้ แต่ที่นี่ไป นักพัฒนาจะตรวจสอบรหัสลงในสาขา QA จากนั้นจะถูกโหลดไปยังสภาพแวดล้อม QA โดยวิศวกรระบบเมื่อผ่าน QA แล้วมันจะได้รับการเลื่อนตำแหน่งไปยังสาขาการผลิต มีอย่างน้อย 2 ของทุกไซต์ที่เชื่อมต่อกับเซิร์ฟเวอร์ในอัตราต่อรองโหลดและ evens ในกรณีนี้หนึ่งในสองเซิร์ฟเวอร์จะถูกนำไปออฟไลน์ iis จะหยุดทำงานไซต์จะถูกเก็บถาวรและไซต์ใหม่จะถูกปรับใช้พร้อมกับ การเปลี่ยนแปลง iis ใด ๆ ที่จำเป็นต้องใช้ iis จะเริ่มต้นใหม่และคุณจะย้ายไปยังเซิร์ฟเวอร์ถัดไป นี่คือสคริปต์ทั้งหมดที่ใช้ C # ในกรณีของเรา แต่มันทำในอดีตโดยใช้สคริปต์ vb ฉันหวังว่าจะช่วย ไชโย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.