อะไรคือ“ งานสร้างที่จำลองได้อย่างแท้จริง”?


9

พวกมันคืออะไรกันแน่? เหตุใดจึงมีความสำคัญในโดเมนการจัดส่งต่อเนื่อง

บริบท: ฉันได้เห็นในหนึ่งใน (ฉันเดาว่า reddit) ความคิดเห็นของงานสร้างที่ทำซ้ำได้อย่างแท้จริงยังคงเป็นเทคโนโลยีภายใต้การวิจัยและยากที่จะสร้าง

ดังนั้นฉันอยากรู้ว่าทำไมพวกเขาจึงสร้างยาก


อาจมีบางตัวชี้ไปยังบริบทที่ใช้อ้างอิง
Dan Cornilescu

@DanCornilescu แน่นอน เพิ่มรายละเอียด :)
Dawny33

@ Pierre.Vriens โดยการดึงออกผมหมายถึงmake possible:) แก้ไข qn ด้วย!
Dawny33

1
Merci สำหรับการแก้ไข แต่เมื่อมองดูแล้วฉันคิดว่าคุณหมายถึง "สร้าง" ...
Pierre.Vriens

1
ฉันลังเลที่จะปรับปรุงคำตอบของฉัน (หรือเพิ่มคำตอบอื่น) ด้วยอีกตัวอย่างหนึ่งจากประสบการณ์ของฉันเองจากย้อนกลับไปในช่วงต้น 90s ... ซึ่ง (ตัวอักษร) เกี่ยวข้องกับการบินไปยังอีกด้านหนึ่งของโลกด้วย 3 , ฟลอปปี้ 5 นิ้ว (2 สำเนา, ในกรณีที่เกิดข้อผิดพลาดในการอ่าน ... ), เพื่อส่งมอบซอฟต์แวร์ของเราที่ บริษัท (ใหญ่) ... และที่ฉันต้องสร้างไฟล์ปฏิบัติการในสภาพแวดล้อมของพวกเขา (บนเมนเฟรม) .. . DevOps-avant-la-lettre ...
Pierre.Vriens

คำตอบ:


8

พวกมันคืออะไรกันแน่?

นี่คือคำพูดจากreproducible-builds.org :

Reproducible builds เป็นชุดของแนวทางปฏิบัติในการพัฒนาซอฟต์แวร์ที่สร้างเส้นทางที่สามารถตรวจสอบได้จากซอร์สโค้ดที่มนุษย์สามารถอ่านได้ไปจนถึงรหัสไบนารี่ที่คอมพิวเตอร์ใช้

ทำไมพวกเขาถึงสำคัญ?

IMO วิธีที่ง่ายที่สุดในการอธิบายความสำคัญของพวกเขาคือการพิจารณาว่าเป็นรูปแบบของขั้นตอนการสำรองข้อมูล

ตัวอย่างเช่น:

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

  • ทุกอย่างเป็นไปด้วยดี แต่ในบางครั้งมีข้อผิดพลาดเกิดขึ้นกับผู้จำหน่ายซอฟต์แวร์เช่นพวกเขาเลิกกิจการ (เช่นล้มละลาย)

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

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

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

และทำไมพวกเขาจึงสร้างยาก?

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


4

เพื่อให้เป็นตัวอย่างในทางปฏิบัติของความพยายามในการสร้างสร้างทำซ้ำอย่างแท้จริงพิจารณาดังต่อไปนี้ -

ไพพ์ไลน์ build ซึ่งเริ่มต้นด้วยที่เก็บ git ซึ่งไม่มีผู้ใช้สามารถเขียนประวัติหรือลบสาขาที่ไม่ได้รวม

ขั้นตอนแรก "สร้าง" หลังจากตรวจสอบซอร์สโค้ดคือการหมุนคอนเทนเนอร์ที่มีการอ้างอิงเวลา build ทั้งหมด

เอาต์พุตของคอนเทนเนอร์เวลาบิลด์ที่รันคือคอนเทนเนอร์ที่มีไบนารีที่คอมไพล์แล้ว

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

  • แฮชที่แท้จริงของซอร์สโค้ดในที่เก็บต้นฉบับและ url ของทั้ง git repo และสแน็ปช็อตบอลของรหัสที่อัปโหลดไปยังที่เก็บสิ่งประดิษฐ์
  • เวอร์ชันที่แน่นอนของบิลด์คอนเทนเนอร์ที่ใช้เพื่อรันบิลด์
  • เวอร์ชันพื้นฐานของอิมเมจพื้นฐานที่ไบนารีถูกโหลดเข้ามา
  • ค่าของตัวแปร build-time ทั้งหมดที่ใช้เพื่อสร้างไบนารี
  • เวอร์ชันของตัวเทียบท่าที่ทั้งสามคอนเทนเนอร์ที่สร้างขึ้นด้วยเช่นเดียวกับเวอร์ชันที่พวกมันทำงานอยู่เมื่อสร้างขึ้น

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

ตามหลักวิชาแล้วสิ่งนี้จะทำให้เรามีความสามารถในการสร้างรุ่นบิลด์

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

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