พื้นหลัง
ฉันกำลังทำงานเพื่อสร้างกระบวนการพัฒนาใหม่สำหรับทีมงานเว็บขนาดเล็กที่มีโปรแกรมเมอร์ประมาณ 4 คนและนักออกแบบ 4 คนที่มีศักยภาพชัดเจนในการเติบโตทีมในอนาคต ผลิตภัณฑ์ของเราเป็นแอพพลิเคชั่นกลางที่สนับสนุนเว็บไซต์ลูกค้าที่เราออกแบบและโฮสต์
ก่อนหน้านี้เราทำงานผ่าน FTP บนเซิร์ฟเวอร์ dev ด้วยฐานข้อมูล dev เดียว มัน "ทำงาน" *ในขณะที่ แต่เราจะย้ายเข้าไปอยู่ในทิศทางใหม่ดังนั้นจึงเป็นเวลาที่จะครบกำหนดกระบวนการของเรา
เราใช้ Percona Server 5.5 แต่นี่ควรเป็นฐานข้อมูลที่ไม่เชื่อเรื่องพระเจ้าโดยมีแนวคิดว่าจะรักษาต้นทุนให้ต่ำ
เป้าหมาย :
ฉันกำลังมองหาการสร้างกระบวนการการรวมอย่างต่อเนื่อง (CI) สำหรับการพัฒนาฐานข้อมูลโดยคำนึงถึงสิ่งต่อไปนี้:
- นักพัฒนามีสำเนาของข้อมูลภายในเพื่อเรียกใช้รหัสการพัฒนาเทียบกับ
- โครงสร้างฐานข้อมูลย้อนกลับไปยังชุดการแก้ไขก่อนหน้า
- สามารถแยกการเปลี่ยนแปลงคุณสมบัติใหม่กับการเปลี่ยนแปลงแก้ไขการออกแบบสคีมา
- สามารถแก้ไขโครงสร้างฐานข้อมูลในเครื่องเพื่อทำการทดสอบ
แนวคิดเริ่มต้น
ผมได้ร่างออกกระบวนการด้านล่างใช้ SVN และ LiquiBase #4
แม้ว่ามันจะลบอย่างสมบูรณ์
- สร้างสาขา 'การพัฒนา' จากลำตัว
- เซิร์ฟเวอร์ db 'กลางพัฒนา' จะปิดสาขา 'พัฒนา'
- นักพัฒนาท้องถิ่นถูกตั้งค่าให้เป็นทาสของสาขาการพัฒนา (แสดง
#1
ไว้ด้านบน)- liquibase การแก้ไขมีความมุ่งมั่นอย่างสม่ำเสมอเพื่อให้สาขาการพัฒนาที่ดำเนินการหลังกระทำเบ็ดเพื่อปรับปรุงการพัฒนาฐานข้อมูลกลาง (ซึ่งจะหยดลงไปยังเครื่องท้องถิ่นทำงานเป็นทาสไปยังเซิร์ฟเวอร์ของการพัฒนานี้) (liquibase ให้
#2
ด้านบน)- เมื่อฟีเจอร์หรือสคีมาการแก้ไขพร้อมที่จะไปยัง QA, DBA (ฉัน) จะรวมการเปลี่ยนแปลงที่เหมาะสมจากสาขาการพัฒนาเข้าสู่ลำต้น การกระทำนี้จะสร้างสคริปต์ sql เพื่อใช้กับเซิร์ฟเวอร์ฐานข้อมูลการแสดงละคร
- เซิร์ฟเวอร์ Staging ควรสะท้อนถึง TRUNK ซึ่งควรมีโครงสร้างเหมือนกับการผลิตรวมถึงการเปลี่ยนแปลงที่อยู่ใน QA
- หลังจากรันสคริปต์ sql บนเซิร์ฟเวอร์ staging ให้ทำ QA บางอย่างเกี่ยวกับการเปลี่ยนแปลง
- หากทุกอย่างดูดีให้แท็กโครงสร้าง สิ่งนี้จะสร้างสคริปต์. sql เพื่อให้ทำงานในการผลิตด้วยตนเองโดย DBA (สำหรับชั่วโมงที่มีการใช้งานไม่มากหากจำเป็น)
กระบวนการนี้ต้องการให้นักพัฒนาทั้งหมดหมดสาขา 'การพัฒนา' เดียวกันซึ่งหมายความว่ามีสกีมาฐานข้อมูลเพียงเวอร์ชันเดียวในเวลาใดก็ตาม (ไม่แน่ใจว่าฉันต้องการสิ่งนี้)
นอกจากนี้ยังหมายความว่าการเปลี่ยนแปลงใด ๆ กับสคีมาไม่สามารถทดสอบในพื้นที่และอาจส่งผลกระทบต่อนักพัฒนารายอื่นหากไม่ถูกต้อง ในสภาพแวดล้อมของเรานักพัฒนาอาจเพิ่มตารางใหม่ แต่ไม่ค่อยแก้ไขโครงสร้างที่มีอยู่ ในฐานะ DBA ฉันได้ทำการแก้ไขการออกแบบแล้ว แต่การที่ไม่สามารถทดสอบการแก้ไขในเครื่องได้คือกระบวนการที่ใหญ่ที่สุดของฉัน
กระบวนการข้างต้นสามารถ tweaked เพื่อให้การพัฒนาท้องถิ่นในขณะที่ยังคงรักษาสำเนาที่ค่อนข้างทันสมัยของข้อมูล (ตามที่จัดทำโดยการจำลองแบบในกระบวนการที่เสนอของฉัน)? ฉันไม่ต้องการข้อมูลที่เป็นปัจจุบันจนถึงสัปดาห์ที่ผ่านมา
*โดย 'ทำงาน' ฉันหมายถึงพอเพียง แต่เป็น PITA