คุณสามารถปรับใช้อย่างต่อเนื่องกับโปรแกรมเมอร์อาวุโสได้หรือไม่?


11

มีช่วงเวลาที่คุณเริ่มเข้าใจว่าในสถาปัตยกรรม micro service มันน่ากลัวกว่าที่จะรอหนึ่งสัปดาห์ในการปรับใช้ micro services ทั้งหมดในครั้งเดียวเพื่อให้แน่ใจว่าทุกอย่างทำงานร่วมกันได้มากกว่าบังคับใช้ api versioning เขียนจำนวนมากโดยอัตโนมัติ การทดสอบ (แต่ละบิต: หน่วยและ exploratory, การรวม) และการปรับใช้อัตโนมัติเพื่อการผลิตทันทีที่การส่งผ่านของคุณเป็นการทดสอบบนเวที

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

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

ฉันหวังว่านี่จะไม่ใช่ความเห็นและฉันหวังว่าคุณจะแบ่งปันประสบการณ์ของคุณขอบคุณ

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


it is more scary to wait a week to deploy all micro services at once to make sure that everything works together, than to strictly enforce api versioning, write lots of automatic tests (...), and auto deploy to production as soon as your commit passes as tests on stage- ที่ความเห็นตาม;) IMHO มันยากมากที่จะให้ประสบความสำเร็จกับการใช้งานบริการอิสระกว่าด้วยวิธีการที่เสาหิน: softwareengineering.stackexchange.com/a/342346/187812 และด้วย CI จริง (ไม่มีสาขา / สาขาการรวม) คุณไม่ควรรอเป็นเวลาหนึ่งสัปดาห์
Dan Cornilescu

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

คำตอบ:


16

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

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


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

@doker หากคุณกังวลว่าจะต้องผลักดันบริการจำนวนมากเข้าด้วยกันอย่าทำเช่นนั้น ตรวจสอบให้แน่ใจว่าแต่ละบริการ (และการเปลี่ยนแปลงที่ทำกับมัน) ยืนด้วยตนเอง หากมีการเปลี่ยนแปลงบริการ A ให้ทำการตรวจสอบโค้ดอย่างรวดเร็วเพื่อให้แน่ใจว่ามันจะทำงานกับการเปลี่ยนแปลงใหม่และสามารถปรับใช้ด้วยตัวเอง หากมีการเปลี่ยนแปลงที่ไม่หยุดยั้งให้ใช้การตรวจสอบรหัสเป็นสถานที่เพื่อบังคับใช้การกำหนดรุ่น API หากบริการ B ขึ้นอยู่กับบริการ A ให้ทำงานบน A ก่อนจากนั้นนำข้อมูลนั้นออก จากนั้นทำงานกับ B. หากผู้อยู่ใต้บังคับบัญชาคุณเปลี่ยนเป็น A, B, C และ D และพวกเขาพึ่งพาซึ่งกันและกันพวกเขาจำเป็นต้องจัดทำเอกสารเพื่อให้คุณสามารถตรวจสอบได้
Becuzz

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

3

การปรับใช้อย่างต่อเนื่องจะทำงานได้ดีหากคุณมีชุดทดสอบอัตโนมัติที่ดี

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

ไอคอนสถานะการสร้าง CatLight

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


3

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


1

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

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


1

จากประสบการณ์ที่ผ่านมากับฐานรหัสBig Ball Of Mudซึ่งพัฒนาขึ้นตามธรรมชาติในช่วงหลายปีที่ผ่านมาด้วยมือของผู้พัฒนารุ่นเยาว์ที่ไม่มีผู้ดูแลฉันอยากจะชี้ให้เห็นว่าเกิดอะไรขึ้นเมื่อคุณไม่ฝึก CI กับนักพัฒนาเหล่านั้น


แก้ไข / อัปเดต : ตามความคิดเห็นของ RubberDuck; คำตอบนี้อนุมานว่าเป้าหมายการผสานของคุณสำหรับการรวมเป็นสาขาการพัฒนามากกว่าสาขาการประเมินหรือสาขาการปล่อย

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

1. ผู้พัฒนาเยาวชนมีโอกาสน้อยที่จะสื่อสารกับเพื่อนร่วมงานหรือหัวหน้างานของพวกเขา

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

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

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

2. รหัสที่พวกเขาผลิตนั้นมีแนวโน้มที่จะต้องการการตรวจสอบที่เข้มงวดยิ่งขึ้น

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

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

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

หลายโครงการกลายเป็นลูกโคลนขนาดใหญ่เพียงเพราะมีการเขียนโค้ดไม่ดีทั้งหมดเมื่อไม่มีใครสนใจจนกว่าจะสายเกินไป

3. คุณควรแน่ใจน้อยกว่าว่าผู้พัฒนารุ่นเยาว์หรือสมาชิกทีมใหม่คนอื่น ๆ เข้าใจข้อกำหนด

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

นี่เป็นปัญหาที่มีแนวโน้มที่จะส่งผลกระทบต่อนักพัฒนาที่ไม่มีประสบการณ์ซึ่งมีแนวโน้มที่จะยอมรับข้อกำหนด "ไม่ดี" ที่ราคาหน้าแทนที่จะเปลี่ยนกลับและตั้งคำถามเกี่ยวกับภูมิปัญญาของความต้องการ

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

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

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

5. ระยะเวลานานระหว่างการคอมมิท / การรวมรหัสทำให้เกิดข้อบกพร่องยากที่จะระบุและแก้ไข

เมื่อบั๊กเกิดขึ้นทันทีหลังจากรวมค่าการเปลี่ยนแปลงโค้ดหลายสัปดาห์เข้าในสาขาหลักความท้าทายในการระบุว่าการเปลี่ยนแปลงใดที่อาจทำให้บั๊กยากขึ้น

เห็นได้ชัดว่ากลยุทธ์การแยกสาขาโดยรวมของคุณก็มาที่นี่ด้วยเช่นกัน นักพัฒนาซอฟต์แวร์ของคุณทั้งหมดจะทำงานในสาขาของตนเองหรือภายในสาขาฟีเจอร์ (หรือทั้งสองอย่าง) และจะไม่ทำงานโดยตรงจากต้นแบบ / ลำต้น

ฉันเคยเห็นสถานการณ์ที่ทั้งทีมทำงานโดยตรงกับมาสเตอร์ / หีบในเวลาเดียวกันและนี่เป็นสภาพแวดล้อมที่เลวร้ายสำหรับ CI แต่โชคดีที่ทางออกของการดึงทุกคนออกจากมาสเตอร์ / trunk โดยทั่วไปมีความมั่นคงเพียงพอสำหรับการทำงานเดี่ยว รายการ / ตั๋ว / ฯลฯ

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


สรุป; ข้อได้เปรียบหลักของการรวมอย่างต่อเนื่อง / การปรับใช้อย่างต่อเนื่องคือ:

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

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


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

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

0

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

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

หากคุณกังวลก็คือว่ารหัส shite เป็นไปได้ผ่านที่ไม่ได้อยู่ CI และมันไม่ได้อยู่ในรุ่นนี้มันเกี่ยวกับคุณ

ดังนั้นช่วยพวกเขาให้ดีขึ้นและคุ้นเคยกับการปรับใช้รหัส stage / prod เร็วขึ้น คุณจะขอบคุณตัวเองในระยะยาว


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