วิธีที่มีประสิทธิภาพในการรักษาโครงการที่ผ่านมากับสภาพแวดล้อมการพัฒนาการทำงานของพวกเขา?


19

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

ตัวอย่างเช่นฉันมีโครงการงูหลามที่ฉันสร้างขึ้นใน Linux และขึ้นอยู่กับแพคเกจซอฟต์แวร์ที่ติดตั้งได้ง่ายใน Linux แต่ฉันไม่ได้ใช้ Linux VM ที่ฉันใช้อีกต่อไป และโครงการอื่น ๆ ของฉันขึ้นอยู่กับตัวแปรอื่น ๆ เช่นการกำหนดค่าเว็บเซิร์ฟเวอร์ตัวแปร PATH, sdk, IDE, เวอร์ชั่นระบบปฏิบัติการ, อุปกรณ์ ฯลฯ

มีใครบางคนมีวิธีที่มีประสิทธิภาพในการจัดการปัญหานี้หรือไม่? ณ ตอนนี้ผมได้เกี่ยวข้องเฉพาะกับการรักษาตัวเองรหัสที่มาสำรองไว้เลยว่ามันเป็นเรื่องยากที่สร้างใหม่การพัฒนาสภาพแวดล้อมการทำงานและมันก็ยังเป็นเรื่องยากที่จะให้การพัฒนาสภาพแวดล้อมการทำงานรอบเช่นกัน


6
NSA คือข้อมูลสำรองของฉัน
Steffe

คำตอบ:


17

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


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

นี่คือสิ่งที่ฉันทำมาแล้วในอดีต ... ยอดเยี่ยมสำหรับการสนับสนุนสภาพแวดล้อมไคลเอนต์ที่แตกต่างกันเป็นต้นถ้าคุณใช้ VM พื้นฐานจากนั้น VM แต่ละตัวที่ต่อเนื่องกันอาจเป็นไฟล์ diff ซึ่งจะประหยัดพื้นที่ดิสก์ถ้ามันเป็น ปัญหา ... แต่โดยส่วนตัวฉันคิดว่าฮาร์ดไดรฟ์ราคาถูก :-)
davewasthere

ด้วยการรองรับ LXC ที่เพิ่มขึ้นจะปลอดภัยกว่าเมื่อใช้กับ VM เมื่อจัดการกับสภาพแวดล้อมของ linux มันน้อยกว่าความต้องการทรัพยากรและวิธีที่เร็วกว่า ATM เครื่องมือที่ดีที่สุดในการจัดการพวกมันคือนักเทียบท่า
karka91

11

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

บางสภาพแวดล้อมใช้เวลาเพียง 5 นาทีในการติดตั้งด้วยสคริปต์ - ในกรณีนี้ฉันเก็บ VM ท้องถิ่นด้วยการติดตั้งระบบปฏิบัติการเป้าหมายใหม่ซึ่งฉันปรับใช้สคริปต์โครงการเมื่อฉันมาถึงที่ทำงานในตอนเช้า - จากนั้นทำการเข้ารหัสทั้งหมด งานที่เกี่ยวข้องกับอินสแตนซ์ VM นั้น ก่อนที่ฉันจะออกไปฉันจะผลักดันการเปลี่ยนแปลงทั้งหมดผ่าน git ไปยังเครื่องทางกายภาพหรือที่เก็บส่วนกลางของเราและยุติ VM

หากสภาพแวดล้อมใช้เวลาในการตั้งค่านานกว่า (การติดตั้งที่ใช้เวลานานไฟล์ขนาดใหญ่ที่จะดาวน์โหลดอะไรทำนองนั้น) ฉันทำตามขั้นตอนด้านบนสัปดาห์ละครั้ง

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


4

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

การจัดการการกำหนดค่านอกจากช่วยรักษาสภาพแวดล้อมการทำงานภายใต้การควบคุมยังช่วยสร้างบันทึกสภาพแวดล้อมการทำงานที่แตกต่างกันซึ่งใช้ซอฟต์แวร์ (การพัฒนาดังกล่าวรวมถึงการทดสอบ / QA การปรับใช้กับลูกค้าประจำการปรับใช้ให้กับลูกค้า หรือสร้างคุณสมบัติเป็นต้น)

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

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

Vagrantใช้วิธีนี้ในทิศทางที่แตกต่างกันเล็กน้อยและให้วิธีการหมุนนิยามเครื่องเสมือนอย่างรวดเร็วเช่น VM สามารถมีซอฟต์แวร์เสมือนและฮาร์ดแวร์เสมือนได้โดยอัตโนมัติและสามารถพิสูจน์ได้ว่าเป็นวิธีที่สะดวกในการทำซ้ำการเป็นตัวแทนของฮาร์ดแวร์ สภาพแวดล้อมที่ผู้ใช้ซอฟต์แวร์ของคุณใช้

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


โปรดขยายกลยุทธ์ที่คุณพูดถึงในคำชี้แจงของคุณว่า "แต่มันมีความแตกต่างมากพอที่จะต้องใช้กลยุทธ์แยกต่างหาก"? ฉันจะใช้ Vagrant และจัดเก็บการกำหนดค่า VM ในที่เก็บของซอร์สโค้ดของฉันและสงสัยว่าจะต้องได้รับการปฏิบัติที่แตกต่างไปจากจุดใด?
CL22

3

นักเทียบท่าจะเป็นตัวเลือกที่ดี คุณสามารถใช้ dockerfile เพื่อทำหน้าที่เป็นรายการสำหรับ VM ที่คุณต้องการ คุณไม่จำเป็นต้องเก็บภาพใด ๆ มันจะดาวน์โหลดภาพที่ต้องการ นอกจากนี้ยังสามารถใช้ภาพของคุณเองเพื่อให้คุณสามารถสร้างภาพฐานของคุณเองแล้วเพิ่มองค์ประกอบที่จำเป็นต่อสภาพแวดล้อม

การใช้นักเทียบท่าสิ่งนี้สามารถปรับปรุงส่วนอื่น ๆ ของเวิร์กโฟลว์ของคุณ:

  • สภาพแวดล้อมที่สร้างขึ้นสามารถใส่ CVS เดียวกันกับโครงการของคุณซึ่งจะให้สภาพแวดล้อมที่เป็นเวอร์ชัน (เรียบร้อย!)
  • นักเทียบท่าสามารถใช้เพื่อจัดเตรียมสภาพแวดล้อมแบบสดลดอาการปวดหัวของการเปิดตัวโครงการของคุณในการผลิต
  • หากคนอื่นเริ่มทำงานกับคุณสิ่งที่พวกเขาต้องมีคือ dockerfile เพื่อโหลดการตั้งค่าสภาพแวดล้อมขนาดใหญ่นั้น

ดังนั้นความคิดที่นี่เกี่ยวกับการใช้ VM เป็นเพียงบางส่วนเท่านั้นฉันรู้ว่า HDD มีขนาดใหญ่ขึ้นเรื่อย ๆ แต่ก็ไม่มีเหตุผลที่จะใช้พื้นที่ทั้งหมดที่คุณมี นอกจากนี้เมื่อสภาพแวดล้อม VM ต้องการพื้นที่ว่างภายใน HDD มากขึ้นอาจเป็นเรื่องยากและมีโอกาสที่คุณจะต้องสร้างใหม่ แม้ว่าขนาดไฟล์อาจไม่เป็นปัญหา แต่ความเร็วของอินเทอร์เน็ตยังคงเป็นปัญหาคอขวดเมื่อคุณต้องการส่งผ่าน 5Go ผ่านการเชื่อมต่อ DSL ปกติ


2

ระบบส่วนใหญ่ (ภาษารันไทม์หรือระบบปฏิบัติการ) มีวิธีการติดตั้งซอฟต์แวร์และการกำหนดค่ามาตรฐานดังนั้นลองใช้วิธีเหล่านั้นดู เช่น:

  • Maven หรือ Gradle สำหรับ Java
  • CPAN สำหรับ Perl
  • rpm สำหรับ RedHat / Fedora
  • dpkg / apt-get สำหรับ Linux
  • แพ็คเกจ MSI สำหรับ Windows

จากนั้นให้คำแนะนำในการติดตั้งอธิบายสิ่งที่จำเป็นต้องติดตั้ง / จำเป็นต้องมีขั้นตอนใดบ้าง:

  • ให้คำแนะนำสั้น ๆ เกี่ยวกับสิ่งที่คุณคิดว่าจะติดตั้ง (ระบบปฏิบัติการพื้นฐานฐานรันไทม์เช่น Java / Perl / Python ... )
  • เขียนสคริปต์สั้น ๆ ที่ดำเนินการติดตั้งตามที่ต้องการ (นึกถึงเพียงแค่การเรียกใช้ครั้งเดียวของเครื่องมือเช่น Maven)
  • ทดสอบสิ่งนี้ในการติดตั้งใหม่ (เช่นบน VM)

จากนั้นคุณควรจะสามารถสร้างสภาพแวดล้อมขึ้นมาและคนอื่น ๆก็สามารถทำได้เช่นกัน (ซึ่งอาจมีความสำคัญหากไม่ใช่โครงการเดี่ยว)

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

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

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