ขณะนี้ทีมของฉันใช้กระบวนการแยก / ปรับใช้ที่ค่อนข้างง่ายซึ่งมีลักษณะดังนี้:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Builds: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Branches: │ master │ │ qa │ │ prod │
└────────┘ └────┘ └──────┘
แต่ละสภาพแวดล้อมมีสาขาของตัวเอง (เราใช้คอมไพล์ ) และบิลด์ของตัวเองที่ใช้สาขานั้น เมื่อเราต้องการเลื่อนระดับจากสภาพแวดล้อมหนึ่งไปอีกสภาพแวดล้อมหนึ่งเช่นจาก DEV ไปยัง QA เราจะรวมmaster
สาขาเข้าqa
และเริ่มการสร้าง QA ใหม่ (ซึ่งจะถูกปรับใช้กับสภาพแวดล้อม QA โดยอัตโนมัติ)
เรากำลังพิจารณาที่จะย้ายไปสู่กระบวนการใหม่ที่จะทำไปโดยมีสาขาเฉพาะและสร้างสำหรับแต่ละสภาพแวดล้อม แต่รุ่นบิลด์เดียวจะสร้าง "แพ็คเกจการปรับใช้" ซึ่งสามารถปรับใช้กับสภาพแวดล้อมใด ๆ แทน เราจินตนาการว่าเวิร์กโฟลว์ทั่วไปจะมีลักษณะดังนี้:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ ──► │ QA │ ──► │ PROD │
└────────┘ └────┘ └──────┘
▲
\
┌───────────────┐
Builds: │ release build │
└───────────────┘
▲
│
┌────────┐ ┌─────────┐
Branches: │ master │ │ release │
└────────┘ └─────────┘
การส่งเสริมจากสภาพแวดล้อมหนึ่งไปอีกสภาพแวดล้อมหนึ่งจะไม่ได้รับการจัดการในการควบคุมแหล่งอีกต่อไป ค่อนข้างเราเพียงแค่ใช้ไบนารีที่สร้างขึ้นแล้ว ("แพ็คเกจการปรับใช้") และวางลงในสภาพแวดล้อมใหม่
ระบบใหม่นี้จะช่วยให้เราสามารถปรับใช้การสร้างใด ๆ กับสภาพแวดล้อมใด ๆ ซึ่งมีข้อดีหลายประการ ตัวอย่างเช่นการทดสอบการแก้ไขข้อบกพร่องของ PROD ใน DEV และ QA นั้นเป็นเรื่องเล็กน้อย ระบบปัจจุบันของเราไม่ได้ให้วิธีง่ายๆในการทำเช่นนี้โดยไม่ต้องย้อนกลับสาขาซึ่งเราต้องการหลีกเลี่ยงอย่างชัดเจน
ข้อเสียเปรียบที่ใหญ่ที่สุดของระบบใหม่นี้คือเราไม่ได้มีวิธีการติดตามอัตโนมัติอีกต่อไปว่าโค้ดใดอยู่ในสภาพแวดล้อมใด ถ้าเราต้องการทำการแก้ไขใน PROD เราจะไม่มีสาขาเฉพาะที่ซิงค์กับฐานรหัสการผลิตปัจจุบันอีกต่อไป เช่นเดียวกันกับ QA - หากเราต้องการผลักดันการเปลี่ยนแปลง QA อย่างรวดเร็วโดยไม่ต้องขุดลอกงานที่กำลังดำเนินการออกmaster
ไปเราจะไม่มีสาขาที่สะท้อนสถานะปัจจุบันของสภาพแวดล้อม QA อีกต่อไป
เราจะติดตามรหัสใดบ้างในแต่ละสภาพแวดล้อม
ตัวเลือกบางอย่างที่เรากำลังพิจารณา:
- ใช้แท็ก Gitเพื่อติดตามการกระทำที่อยู่ในสภาพแวดล้อม
- การฝังคอมไพล์คอมมิทที่ใช้โดยบิลด์ลงในแพ็คเกจการปรับใช้แต่ละแพ็กเกจ