วิธีใช้สลับการตั้งค่าสถานะคุณลักษณะ


15

อะไรคือวิธีการใช้สลับการตั้งค่าสถานะคุณลักษณะในแอปพลิเคชัน

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

คำตอบ:


16

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

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

ด้วยขั้นตอนต่อไปนี้อลิซและบ๊อบสามารถทำงานร่วมกันในสาขาอายุสั้นในขณะที่ลดความขัดแย้ง

  1. Aliceเปลี่ยนชื่อDatabaseClientเป็นDatabaseClient_v1และสร้างคลาสผู้รับมอบสิทธิ์ชื่อDatabaseClientที่ใช้วัตถุDatabaseClient_v1และใช้อินเทอร์เฟซที่เรียกว่าDatabaseClientInterface (ถ้าเป็นไปได้DatabaseClientInterfaceนี้ควรเป็นสิ่งประดิษฐ์รหัส แต่ภาษาที่พิมพ์ด้วยเป็ดไม่สนับสนุนสิ่งนี้เสมอไป)

  2. ความคิดเห็นบ๊อบเปลี่ยนแปลงที่ทำโดยอลิซใน 1 และตระหนักว่างานบำรุงรักษาของเขาควรจะเกิดขึ้นในDatabaseClient_v1

  3. อลิซแนะนำธงกำหนดค่าใหม่ในการประยุกต์ใช้ที่ควบคุมพฤติกรรมของDatabaseClientผู้ร่วมประชุมและดำเนินDatabaseClient_v2ยึดเป็นระดับการใช้DatabaseClientInterfaceมีวิธีการทั้งหมดโยน“ไม่ดำเนินการ” ยกเว้น

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

การทำซ้ำจากอลิซนั้นสั้นมากเช่นการทดสอบการใช้วิธีการหรือแม้แต่ทำบางส่วนเพราะในการผลิตรหัสไม่ได้ถูกเลือกให้ใช้และไม่จำเป็นต้องทำงานได้อย่างสมบูรณ์ TestSuite อัตโนมัติควรจะกำหนดค่าเพื่อให้DatabaseClientInterfaceมักจะใช้DatabaseClient_v1ขณะที่อลิซสามารถสลับไปDatabaseClient_v2เมื่อทำงาน TestSuite ในประเทศ - หรือในการติดตั้ง CI กำหนดเอง เมื่อทุกอย่างพร้อมแล้วคอมมิชชันเดียวสามารถทำการเปลี่ยนแปลงได้โดยการอัพเดตค่าการกำหนดค่าที่ควบคุม ตัวแทนของDatabaseClient


7

ขั้นตอนค่อนข้าง "ง่าย" ในการย้ายไปยังแอปตั้งค่าสถานะคุณลักษณะคุณต้องมีสองสิ่ง:

  1. ที่เก็บแฟล็ก (ตัวแปรไฟล์ / ฐานข้อมูล / env)
  2. คำสั่งแบบมีเงื่อนไขเพื่อเปลี่ยนพฤติกรรมตามธง

การตั้งค่าสถานะพื้นฐานของคุณสมบัติคือการเปิด / ปิด แต่คุณจะต้องปล่อยคุณลักษณะใหม่อย่างรวดเร็วเช่น: 1 เซิร์ฟเวอร์บน 5 โฮสต์แอปมีคุณลักษณะ "เปิด" เพื่อเริ่มต้น จากนั้นคุณเปิดคุณสมบัตินี้บนเซิร์ฟเวอร์อื่นจนกว่าเซิร์ฟเวอร์ทั้งหมดจะมีสถานะ "เปิด"

ซึ่งหมายความว่าคุณจะต้องระมัดระวังเกี่ยวกับคุณสมบัติของคุณที่เข้ากันได้กับแอพที่ไม่มี (เช่นคอลัมน์พิเศษในฐานข้อมูล)

เฟรมเวิร์กมีอยู่ในหลายภาษาเพื่อหลีกเลี่ยงการดัดแปลงล้อเลื่อนอีกครั้งหนึ่งซึ่งตอนนี้ไม่ได้รับการดูแลจาก Etsy มีreadme ที่น่าสนใจเพื่ออธิบายวิธีการทำงาน


2

โลกของซอฟต์แวร์แบบฝังตัวมักจะใช้แฟลกเวลาสร้างในรหัสแอพ ( ตัวอย่างเช่น#define/ #ifdefstatement) และ / หรือในไฟล์กำหนดค่าเครื่องมือสร้าง ( makefileตัวอย่างเช่น)

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

แต่นอกเหนือจากการตรวจสอบรหัสสาขาที่มีอยู่แล้วสำหรับการถดถอยแล้วยังสามารถทำการตรวจสอบความคืบหน้า / ความเสถียรของรหัสใหม่ได้อีกด้วย สำหรับสิ่งนี้แฟล็กเวลาบิลด์ต้องถูกสลับ

วิธีหนึ่งในการสลับค่าสถานะจะต้องใช้ในขั้นตอนการตรวจสอบแยกต่างหากของระบบ CI ของสาขาเดียวกัน (หากมีการสนับสนุนการใช้งานดังกล่าว) ไฟล์ patchfile จะสลับสถานะ - เพื่อใช้กับพื้นที่ทำงานแยกต่างหากก่อน สร้าง. ชุดของสิ่งประดิษฐ์ที่แตกต่างกันจะถูกสร้างขึ้นในพื้นที่ทำงานนี้แล้วตรวจสอบแล้ว

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

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


1
ยินดีต้อนรับสู่ 1K-DevOps-world ... ใช้สิทธิพิเศษที่มาพร้อมกับมันอย่างชาญฉลาด ...
Pierre.Vriens
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.