การคืนค่าการคอมมิตโดยอัตโนมัติที่ล้มเหลวในการสร้าง


43

เพื่อนร่วมงานของฉันบอกฉันว่าเขากำลังคิดที่จะทำให้เซิร์ฟเวอร์ CI ของเรากลับไปใช้สิ่งที่ล้มเหลวในการสร้างดังนั้นHEADin masterจึงมีความเสถียรอยู่เสมอ (เช่นเดียวกับที่ผ่านการสร้างอย่างน้อย)

นี่เป็นวิธีปฏิบัติที่ดีที่สุดหรืออาจเป็นปัญหามากกว่าแค่ปล่อยให้masterแตกจนกว่าผู้พัฒนาจะแก้ไขหรือไม่

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

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

การแก้ไขอื่น (ความยาว): ตกลงเรากำลังใช้gitวิธีแปลก ๆ เราเชื่อว่าแนวคิดของสาขาแตกต่างจาก CI จริงเนื่องจากการทำหน้าที่แยกสาขาคุณออกจากนักพัฒนาคนอื่นและการเปลี่ยนแปลงของพวกเขาและเพิ่มเวลาเมื่อคุณต้องรวบรวมสาขาของคุณอีกครั้งและจัดการกับความขัดแย้งที่อาจเกิดขึ้น หากทุกคนยอมรับmasterความขัดแย้งนี้จะลดลงเหลือน้อยที่สุดและทุกการกระทำผ่านการทดสอบทั้งหมด

แน่นอนว่าสิ่งนี้บังคับให้คุณผลักดันเฉพาะความเสถียร (หรือคุณทำลายโครงสร้าง) และตั้งโปรแกรมอย่างระมัดระวังมากขึ้นเพื่อไม่ให้ทำลายความเข้ากันได้ย้อนหลังหรือทำการสลับคุณลักษณะเมื่อแนะนำคุณสมบัติใหม่

มีการแลกเปลี่ยนเมื่อทำ CI ด้วยวิธีนี้ แต่นั่นไม่ได้อยู่ในขอบเขตของคำถาม (ดูคำถามที่เกี่ยวข้องสำหรับเรื่องนี้) หากคุณต้องการฉันอาจตั้งคำถามใหม่: ทีมนักพัฒนาเล็ก ๆ ทำงานร่วมกันในสาขาฟีเจอร์ หากนักพัฒนารายหนึ่งยอมรับสิ่งที่ทำลายการสร้างสำหรับสาขานั้นระบบ CI ควรเปลี่ยนการยอมรับหรือไม่?


38
การสร้างที่ล้มเหลวไม่ควรmasterเริ่มต้นด้วย นั่นคือสิ่งที่สาขาการพัฒนาและฟีเจอร์ใช้สำหรับ การเปลี่ยนแปลงเหล่านั้นจะเกิดขึ้นในสาขาการรวมที่คุณสามารถทดสอบว่าคุณลักษณะใหม่ทั้งหมดของนักพัฒนาหลายคนจะทำงานร่วมกันได้หรือไม่และหากการทดสอบนี้สามารถเข้าสู่ต้นแบบได้ หรืออย่างน้อยนั่นก็เป็นขั้นตอนการทำงานที่เป็นไปได้
thorsten müller

1
@ thorstenmüllerนึกได้ว่ามันเป็นสาขาการพัฒนาที่นักพัฒนาทั้งหมดใช้ ควร CI ระบบย้อนกลับยอมรับว่าล้มเหลวในการสร้าง?
Carlos Campderrós

7
ดูเหมือนว่าคุณกำลังใช้คอมไพล์ในทางที่แปลก โดยทั่วไปผู้คนควรทำงานใน repos ของตัวเองในสาขาของตนเองและผลักดันหลักเมื่อ CI สำหรับงานสร้างส่วนบุคคลยืนยันว่าการเปลี่ยนแปลงนั้นตกลง
Wilbert

4
> "ความขัดแย้งนี้ลดลงเหลือน้อยที่สุด"; คุณได้รับความขัดแย้งน้อยลงในเวลารวม แต่คุณพบปัญหากับการรวมที่ไม่ดีมากขึ้น ทางออกคือการผสานอย่างต่อเนื่องจากต้นแบบไปยังสาขาของคุณเป็นส่วนหนึ่งของกระบวนการของคุณไม่ใช่สาขา
deworde

2
... ทำไมไม่ทำให้ความล้มเหลวในการสร้างไม่ได้รับการยอมรับในระดับเริ่มต้น
253751

คำตอบ:


55

ฉันจะต่อต้านการทำเช่นนี้ด้วยเหตุผลดังต่อไปนี้:

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

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

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


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

1
มีอีกตัวเลือกหนึ่งที่ใช้และดีกว่าที่ฉันคิดและใช้งานหนัก (เราใช้ที่ twitter) อย่าทำให้การสร้างล้มเหลวบนมาสเตอร์และความผิดพลาดโง่ ๆ นั้นง่ายต่อการแก้ไขเช่นกัน ดูคำตอบเต็มของฉันด้านล่าง
Dean Hiller

26

ลองตกลงกันก่อนดีกว่า

ฉันใช้คำว่า Build Build และ Integration Integration อย่างต่อเนื่องเป็นการส่วนตัวเพื่อแยกความแตกต่างของสองสถานการณ์:

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

การบูรณาการอย่างต่อเนื่องหมายถึงพื้นที่เก็บข้อมูลที่ปกป้องนั้นเป็นสีเขียวอยู่เสมอ1 : ดีกว่าอย่างเคร่งครัด

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

1 : สาเหตุด้านสิ่งแวดล้อมยังสามารถทำให้เกิดการสร้างตัวอย่างเช่นการทดสอบกับปีที่มีการเข้ารหัสยาก (2015) อาจเริ่มล้มเหลวในเดือนมกราคม 2559 ดิสก์สามารถเต็มได้ ... และแน่นอนว่าภัยพิบัติไม่แน่นอน การทดสอบ ฉันเพิกเฉยต่อประเด็นเหล่านั้นที่นี่ อย่างอื่นเราจะไม่ได้รับทุกที่


หากคุณมีการตั้งค่า Build อย่างต่อเนื่องคุณสามารถกลับรายการโดยอัตโนมัติที่อาจทำให้การบิลด์เสียหาย แต่มีรายละเอียดย่อยหลายอย่าง

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

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


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

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

ต้องลองทั้งสองอย่างนี้ดีกว่าอย่างเคร่งครัด


2
นี่เป็นคำตอบที่ถูกต้องแน่นอน - ทางออกที่ถูกต้องคือการป้องกันไม่ให้มีการเปลี่ยนแปลงที่ไม่ดีจากการเข้าถึงสาขาหลักไม่ให้ปล่อยให้พวกเขาลงจอด
Daniel Pryden

ฉันคิดว่าปัญหาที่นี่คือผู้ถามเชื่อว่าค่าใช้จ่ายที่ระบุไว้ของ "แยกคุณจากนักพัฒนาอื่น ๆ และการเปลี่ยนแปลงของพวกเขา" เกินดุลประโยชน์ ค่าใช้จ่ายที่ระบุไว้เป็นความเสี่ยงที่เพิ่มขึ้นของการรวมกันที่ไม่สำคัญอีกต่อไปคนสองคนที่แตกต่างกัน IMO ประโยชน์ของการถูกแยกจากรหัสที่ใช้งานไม่ได้นั้นชัดเจน ผู้ถามต้องการใช้กลยุทธ์ "มองโลกในแง่" โดยที่รหัสที่ใช้งานmasterไม่ได้จะถูกดึงให้สั้น ๆแล้วแก้ไขสถานการณ์นี้เมื่อการทดสอบล้มเหลว ทุกคนใช้กลยุทธ์ "มองโลกในแง่ร้าย" ตามที่คุณแนะนำและใช้รหัสผ่านเพื่อดึงเท่านั้น
Steve Jessop

(โดย "พร้อมที่จะดึง" ฉันหมายถึง "ดึงจากmaster" ซึ่งเป็นสิ่งที่นักพัฒนาสามารถทำได้โดยจำใจ แต่เพื่อให้บรรลุว่าคุณต้องหน่วงเวลาคอมมิชชันที่มาถึงmasterก่อนที่พวกเขาจะถูกทดสอบและผ่านหากนักพัฒนาต้องการ cherry-pick รหัสที่ยังไม่ผ่านการทดสอบและทดสอบแล้วและล้มเหลวซึ่งก็ดีเช่นกันและรหัสนั้น "พร้อมใช้งาน" ในแง่นั้นมันไม่ใช่สิ่งที่ฉันอ้างถึง)
Steve Jessop

ทางออกที่ถูกต้องคือการป้องกันไม่ให้มีการเปลี่ยนแปลงที่ไม่ดีถึงสาขาใด ๆ การกระทำที่ล้มเหลวไม่ควรเปิดเผยสู่สาธารณะ
เส้นทาง Miles

5

นี่เป็นวิธีปฏิบัติที่ดีที่สุดหรืออาจเป็นปัญหามากกว่าแค่ปล่อยให้อาจารย์เสียจนนักพัฒนาแก้ไขได้หรือไม่

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

นี่คือข้อเสียบางประการ:

  • ข้อผิดพลาดในกระบวนการกลับรายการอัตโนมัติจะทำให้พื้นที่เก็บข้อมูลเสียหาย

  • สิ่งนี้จะถือว่าเซ็ตการแก้ไขเดียว (ด้านบนสุด) ทำให้เกิดการบิลด์ (ซึ่งไม่สมจริง)

  • ผู้ดูแลจะมีงานที่ต้องทำเพื่อแก้ไขปัญหามากกว่าแค่การตรวจสอบและกระทำ (พวกเขาจะต้องดูประวัติย้อนหลังด้วย)

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

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

ในสาขาฟีเจอร์ที่คุณต้องการแยกออกจากนักพัฒนาอื่น ๆ สิ่งนี้ช่วยให้คุณ:

  • ทำการเข้ารหัสแบบสำรวจ

  • ทดลองกับฐานรหัส

  • ดำเนินการบางส่วน (กระทำรหัสไม่ทำงานอย่างมีประสิทธิภาพ) เพื่อตั้งค่าจุดสำรอง (ในกรณีที่คุณพลาด) เพื่อสร้างประวัติการเปลี่ยนแปลงที่มีความหมายมากขึ้น (ผ่านการส่งข้อความ) และเพื่อสำรองงานของคุณและสลับไปยังสิ่งอื่นทั้งหมด (ใน เวลาที่คุณเขียน "git commit && git checkout")

  • ทำงานที่มีลำดับความสำคัญต่ำซึ่งใช้เวลานาน (เช่นคุณต้องการดำเนินการ refactoring ที่เปลี่ยนแปลงคลาส 80 ทั้งหมดของชั้นข้อมูล: คุณเปลี่ยนสองครั้งต่อวันจนกว่าคุณจะเปลี่ยนทั้งหมดที่รวบรวมรหัส (แต่คุณสามารถทำได้ โดยไม่มีผลกระทบต่อใครจนกว่าคุณจะสามารถกระทำการเดียว)

หากนักพัฒนารายหนึ่งยอมรับสิ่งที่ทำลายการสร้างสำหรับสาขานั้นระบบ CI ควรเปลี่ยนการยอมรับหรือไม่?

มันไม่ควร การยืนยันรหัสที่เสถียรในสาขา CI ของคุณเป็นความรับผิดชอบของผู้ส่งไม่ใช่ระบบอัตโนมัติ


2

ฉันขอแนะนำให้ใช้สภาพแวดล้อม Gerrit + Jenkins เพื่อให้สาขาหลักของคุณอยู่ในสภาพดีเสมอ ผู้คนดันรหัสใหม่ของพวกเขาไปที่ Gerrit ซึ่งทำให้งานเจนกินส์ดึงแพทช์นั้นสร้างทดสอบและอื่น ๆ หากผู้พัฒนารายอื่นเช่นแพทช์ของคุณและเจนกินส์ทำงานได้สำเร็จ Gerrit จะรวมรหัสนั้นเข้ากับสาขาหลักของคุณ

มันเป็นสภาพแวดล้อมที่คล้ายกันที่อธิบายโดย @ brian-vandenberg

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

[1] เจนกินส์https://jenkins-ci.org/

[2] Gerrit https://www.gerritcodereview.com/


1

CI ไม่ควรเปลี่ยนแปลงประวัติการกระทำของ repo

วิธีแก้ไขที่ถูกต้องที่นี่คือไม่มีการเพิ่มข้อผูกมัดในสาขาหลักหากยังไม่ได้ทดสอบและตรวจสอบ

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

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


1
สิ่งนี้ไม่ตอบคำถาม แต่อย่างใด หากบิลด์ล้มเหลวในสาขาฟีเจอร์ CI ควรเปลี่ยนการส่งคืนหรือไม่?
Carlos Campderrós

จะเกิดอะไรขึ้นถ้าบิลด์ประสบความสำเร็จในฟีเจอร์แบรนช์ แต่ล้มเหลวหลังจากผสาน?
Matthieu M.

@MatthieuM ผสานเป็นความมุ่งมั่นขั้นตอน CI ที่ผสานการย้อนกลับการสร้างหรือไม่
Carlos Campderrós

@ CarlosCampderrós: ​​โดยส่วนตัวแล้วฉันจะไม่มีการตั้งค่าที่พยายามจะย้อนกลับ ซับซ้อนเกินไป
Matthieu M.

ฉันพูดถึงความคิดเห็น
Daenyth

1

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

ความมุ่งมั่นจะถูกผลักทางอ้อมผ่านขดไปเจนกินส์ที่มันโคลนโคลน repo หลักแล้วดึงในการกระทำที่จะผสานและดำเนินการสร้างที่จำเป็นทั้งหมด (สำหรับ Linux / Solaris) หากการสร้างทั้งหมดเสร็จสิ้นการส่งข้อมูลจะถูกส่ง

วิธีนี้หลีกเลี่ยงปัญหาที่กล่าวถึงในตอนนี้:

  • การเปลี่ยนแปลงประวัติศาสตร์
  • รับประวัติที่ถูกต้องหากคุณเป็นนักพัฒนาที่ต้องแก้ไขความเสียหาย
  • ความไม่แน่นอน (ในรูปแบบของการสร้างที่เสียหาย) จะไม่แนะนำ

นอกจากนี้ยังช่วยให้เราสามารถบังคับใช้ข้อกำหนดอื่น ๆ ได้โดยตรงเช่นการทดสอบหน่วยการเสร็จสมบูรณ์


เรื่อง downvote คุณจะแสดงความคิดเห็นในสิ่งที่คุณไม่ชอบเกี่ยวกับคำตอบของฉันหรือไม่
Brian Vandenberg

0

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

หากระบบไม่ทราบแน่ชัดฉันก็ไม่ต้องการทำให้เป็นอัตโนมัติ


0

คำถามที่ถามมีข้อบกพร่อง ฉันเคารพข้อความนี้

"เราเชื่อว่าแนวคิดของสาขาขัดแย้งกับ CI จริงเพราะการผูกมัดกับสาขาทำให้คุณแยกจากนักพัฒนาคนอื่น ๆ และการเปลี่ยนแปลงของพวกเขา"

สิ่งที่คุณควรทำคือขั้นตอนเหล่านี้

  • ทำงานหลักถ้าคุณชอบ (ที่ดีและดึงการเปลี่ยนแปลงจากทุกคน) แต่ไม่ได้มุ่งมั่นที่จะโทท้องถิ่น
  • ก่อนที่คุณจะยอมรับการเปลี่ยนแปลงของคุณเป็นหลักสร้างสาขาด้วย submit_XXXXXXX
  • ให้บิลด์อัตโนมัติของคุณรับสาขาย่อยทั้งหมดของ send_XXX
  • ตัวเลือกที่ 1: สร้างตัวแบ่งหรือผสานตัวแบ่ง ... การเปลี่ยนแปลงถูกปฏิเสธและจะไม่มีวันตกลงบนต้นแบบ
  • ตัวเลือกที่ 2: สร้างผลงานเจนกินส์ผลักดันต้นแบบและอัปเดต

จากนั้นสิ่งที่เราทำคือใส่คอมไพล์ฮุกในการป้องกันไม่ให้ทุกคนจากการกระทำจริงที่จะโท มันใช้งานได้ดี .... ไม่เคยมีงานสร้างที่เสียหายและไม่มีการคืนค่าคำมั่นสัญญาจากผู้เชี่ยวชาญเช่นกัน

ต่อมาคณบดี

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