Apa sebenarnya “build yang benar-benar dapat direproduksi”?


9

Apa sebenarnya mereka? Mengapa mereka penting, dalam domain Pengiriman Berkelanjutan?

Konteks: Saya telah melihat dalam salah satu komentar (saya kira reddit) bahwa build Sungguh-Benar Dapat Diproduksi masih merupakan teknologi yang masih dalam penelitian, dan sangat sulit untuk dibuat.

Jadi, saya ingin tahu mengapa mereka begitu sulit untuk dibuat?


mungkin beberapa pointer ke konteks di mana mereka dirujuk?
Dan Cornilescu

@DanCornilescu Tentu. Menambahkan rinciannya :)
Dawny33

@ Pierre.Vriens Dengan melakukan pull-off, maksud saya, make possible:) Mengedit qn juga!
Dawny33

1
Merci untuk edit, tetapi melihat itu, saya pikir Anda hanya berarti "buat" ...
Pierre.Vriens

1
Saya ragu untuk meningkatkan jawaban saya (atau menambahkan jawaban lain) dengan contoh lain, dari pengalaman saya sendiri, dari kembali di awal 90-an ... yang (secara harfiah) ada hubungannya dengan terbang ke sisi lain dunia, dengan 3 , Floppy 5 inci (2 salinan, jika ada kesalahan baca ...), untuk mengirimkan perangkat lunak kami di perusahaan (besar) ... dan di mana saya harus membangun kembali executable di lingkungan mereka (pada mainframe) .. DevOps-avant-la-lettre ...
Pierre.Vriens

Jawaban:


8

Apa sebenarnya mereka?

Berikut adalah kutipan dari reproducible-builds.org :

Reproducible builds adalah seperangkat praktik pengembangan perangkat lunak yang membuat jalur yang dapat diverifikasi dari kode sumber yang dapat dibaca manusia ke kode biner yang digunakan oleh komputer.

Mengapa itu penting?

IMO cara termudah untuk menjelaskan pentingnya mereka adalah dengan menganggapnya sebagai variasi dari prosedur cadangan.

Sebagai contoh:

  • Asumsikan bisnis yang menggunakan (tergantung) pada beberapa paket perangkat lunak berlisensi dari beberapa vendor perangkat lunak. Sedangkan bisnis hanya mendapatkan executable, bukan sumber, dll yang digunakan untuk membuat executable tersebut.

  • Semuanya berjalan dengan baik, tetapi pada titik tertentu ada yang salah dengan vendor perangkat lunak, misalnya mereka keluar dari bisnis (misalnya kebangkrutan).

  • Ini dapat menyebabkan risiko pada bisnis (dalam jangka panjang). Yaitu jika tidak ada prosedur / perjanjian di tempat bagi bisnis untuk mendapatkan (legal) akses ke semua sumber yang diperlukan, dokumentasi, prosedur membangun, dll yang terkait dengan apa pun dari vendor perangkat lunak yang digunakan (kembali pada hari-hari) ketika executable (digunakan oleh bisnis) diciptakan (dan dikirim ke bisnis).

  • Itulah " Software Escrow " datang untuk menyelamatkan: jika ada perjanjian seperti itu di tempat, orang akan berpikir bahwa melalui pihak ke-3, masih mungkin bagi bisnis untuk mendapatkan akses ke " apa pun yang digunakan " untuk dapat mereproduksi yang dapat dieksekusi, sehingga sejak saat itu, bisnis mungkin memiliki kesempatan untuk terus menggunakan perangkat lunak itu, dan di mana pantas mulai memeliharanya sendiri (untuk hanya menjalankan bisnis mereka sendiri).

  • Namun, " apa pun yang digunakan " di peluru sebelumnya adalah bagian yang paling sulit untuk membuat pekerjaan ini. Diperlukan pihak ketiga untuk melakukan validasi yang sesuai dimuka. Dan percayalah, perlu beberapa saat sebelum Anda dapat membuat ulang yang dapat dieksekusi yang dapat Anda buktikan bahwa, selain dari (misalnya) tanggal tautan, ini sangat cocok dengan apa yang diberikan oleh vendor perangkat lunak kepada agen perangkat lunak.

Dan mengapa mereka begitu sulit untuk dibuat?

Jika sampel di atas masih belum cukup jelas, bayangkan Anda adalah agen escrow perangkat lunak saya, katakan padaku apa yang Anda butuhkan sebagai input untuk membuat ulang salinan perangkat lunak yang dilisensikan oleh pelanggan saya. Mendapatkan? Anda tidak lupa memeriksa versi kompiler saya, mungkin OS saya, opsi kompilasi / tautan, versi komponen yang dapat digunakan kembali (termasuk), perpustakaan, dll?


4

Untuk memberikan contoh praktis dari upaya menciptakan bangunan yang benar-benar dapat diulang, pertimbangkan hal berikut -

Pipeline build yang dimulai dengan repositori git yang tidak ada pengguna yang bisa menulis ulang histori atau menghapus cabang yang tidak dihapus.

Langkah "build" pertama setelah memeriksa kode sumber adalah memutar wadah yang berisi semua dependensi waktu build.

Output dari menjalankan wadah waktu membangun adalah wadah yang berisi biner dikompilasi.

Lebih penting untuk pengulangan pembuatan tag berikut ditambahkan ke wadah akhir:

  • Hash yang tepat dari kode sumber di repositori asli dan url dari git repo dan snapshot tar bola dari kode yang diunggah ke repositori artifact.
  • Versi persisnya dari wadah build yang digunakan untuk menjalankan build.
  • Versi persis dari gambar dasar asli tempat biner dimasukkan.
  • Nilai semua variabel build-time yang digunakan untuk membuat biner.
  • Versi buruh pelabuhan tempat ketiga kontainer dibangun dengan serta versi mana mereka berjalan di bawah ketika mereka membangun.

Dengan menambahkan semua data meta ini, kami dapat memastikan bahwa pada titik mana pun di masa mendatang, kami dapat menarik set dependensi build yang tepat (melalui kontainer build), mengkompilasi biner dengan serangkaian langkah-langkah yang diketahui (diabadikan pada kontainer build) ) dan kemas ini ke dalam gambar dasar lain yang diketahui dengan semua dependensi run-time (menggunakan tag gambar dasar) dan ini semua dapat didasarkan pada versi kode sumber yang benar dan tepat berdasarkan tag pada wadah.

Secara teoritis ini seharusnya memberi kita kemampuan untuk mereproduksi versi build dengan tepat.

Pentingnya hal ini adalah memungkinkan kita untuk melihat apa yang berjalan dalam produksi dan, bahkan jika semuanya telah mengalami kemajuan versi secara signifikan, kembali dan tarik keluar versi kode, gambar dasar dan wadah penampung yang awalnya digunakan sehingga kita dapat, misalnya , terapkan perbaikan terbaru ke versi itu sebelum membangun kembali persis seperti sebelumnya sehingga kita dapat memindahkan kembali mengetahui bahwa itu persis artefak yang sama dengan satu-satunya delta menjadi perbaikan panas.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.