Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 1081|Atsakyti: 1

Trumpas įvadas į atkuriamą konstrukciją

[Kopijuoti nuorodą]
Publikuota: 2025-4-30 10:09:27 | | | |
Kas yra pakartojama konstrukcija?

Deterministinė konstrukcija arba atkuriama konstrukcija šiek tiek skiriasi, tačiau iš šio straipsnio juos galima suprasti kaip tą patį.

Atkuriamos konstrukcijos nurodoKeli kūrimo proceso vykdymai su ta pačia įvesties ir kūrimo aplinka gali duoti lygiai tuos pačius rezultatus。 Ši technologija yra svarbi programinės įrangos kūrimui, platinimui ir saugumo patvirtinimui.

Komponavimas yra atkuriamas, jei jis pateikia lygiai tą patį rezultatą, nepriklausomai nuo to, kada ir kur jis paleidžiamas. Nesvarbu, kuriame kompiuteryje naudojate, kokiu paros metu ir kokias išorines paslaugas pasiekiate tinkle, atkuriamos versijos sukuria tą pačią baitų išvestį. Tai puikiai tinka tiek kūrimui (nes atkuriamas komponavimo versijas lengva bendrinti skirtinguose kūrėjų įrenginiuose), tiek gamybai (nes lengva užtikrinti, kad atkuriamų versijų rezultatai nebuvo sugadinti – tiesiog paleiskite komponavimą savo kompiuteryje ir patikrinkite, ar rezultatai yra nuoseklūs!). yra labai naudingi.



Trys pakartojamų versijų ramsčiai

1 ramstis: pasikartojančios versijos

Konstrukcijos pakartojamumas reiškia, kas nutinka pačiai kūrimo mašinai. Darant prielaidą, kad mūsų kūrimo įvestis yra prieinama ir niekas nesikeičia mus supančiame pasaulyje, ar mūsų konstrukcija sukuria tą pačią išvestį, kai kartojama?

Deterministinis įrengimo planas

Pirmasis, paprasčiausias ir akivaizdžiausias pakartotinės konstrukcijos reikalavimas yra deterministinis priklausomybės diegimo planas.

Daugeliu kalbų tai taip paprasta, kaip užrakinto failo užrakinimas. Šiuolaikiniai kūrimo įrankiai dažnai leidžia projektams išreikšti tiesioginius priklausomybės reikalavimus kaip apribojimus, o tada išspręsti tuos apribojimus, kad būtų sukurtas diegimo planas (priklausomybių pavadinimų ir versijų porų sąrašas). Daugelis šių įrankių taip pat generuoja užrakto failus serijiniams diegimo planams. Kūrėjai gali pateikti šiuos užrakto failus versijų valdymui, kad būsimose versijose būtų naudojami tie patys priklausomybių pavadinimai ir versijos.

Atkreipkite dėmesį, kad mums taip pat reikia deterministinio priklausomybės kūrimo (ne tik versijos pasirinkimo), o deterministinis diegimo planas neleidžia mums to pasiekti!

Deterministinė konstrukcija

Kai žinome, ką kurti, pats mūsų kūrimas (įskaitant mūsų pačių kodą ir priklausomybės kodo kūrimą) iš tikrųjų turi būti deterministinis.

Tai iš tikrųjų gali būti problema projektams be kompiliavimo žingsnio! Pavyzdžiui, mazgo projektas su visomis priklausomybėmis yra grynas JavaScript, ir norint pasiekti efektyvų deterministiškumą, nereikia jokio papildomo darbo.

Projektuose, kurie apima kompiliavimo ar vertimo (šaltinio šaltinio kompiliavimo) veiksmus, determinizmo užtikrinimas yra pati sunkiausia atkuriamos konstrukcijos kūrimo dalis. Kompiliavimo procesas gali netiesiogiai įvesti nedeterminizmą įvairiais būdais, įskaitant:

  • Turing-complete programos kūrimo scenarijai gali pakeisti kompiliuotą išvestį savo nuožiūra.
  • Scenarijai po įdiegimo, kurie remiasi vykdomųjų failų sistemos paieškomis arba tinklo iškvietimais.
  • C susiejimas su sistemoje įdiegtu paketu, kuriame susiejimai skirtingose sistemose su skirtingomis antraštėmis gali duoti skirtingus rezultatus.
  • Failo, kuris skaitomas už versijų kontrolės ribų, kūrimo veiksmai.
  • Sukurkite laiko žymų generavimo veiksmus naudodami sistemos laiką.
  • Priklausomybių, kurios nėra išreikštos tinklo atsisiuntimo diegimo plane, kūrimo veiksmai (pvz., atsisiųskite NPM priklausomybę iš "GitHub" talpykloje saugomai dvejetainei komponavimo versijai, kuri yra susieta su C).
  • Pakeiskite veikimą pagal šiuo metu nustatytą aplinkos kintamąjį, bet nepateikite komponavimo su aplinkos kintamojo konfigūracija.


Ne visi šie veiksmai būtinai sukelia netikrumą, kai jie tinkamai nustatyti, tačiau tinkamai sukonfigūruoti kūrimo procesą gali būti sudėtinga ir sunku. Pavyzdžiui, galite perskaityti šį tinklaraščio įrašą apie "Chromium" versijų neapibrėžtumą. Daugelį šių problemų galima sušvelninti kontroliuojant vietinę statybos aplinką, kurią aptarsime kitame skyriuje.

2 ramstis: nekintanti aplinka

Net ir su pakartojamomis komponavimo versijomis turime įsitikinti, kad komponavimo įvestis nesikeičia. Dažnai tai reiškia, kad norime būti tikri, kad remiamės nekintančia aplinkos nuotrauka.

Nekintanti vietinė aplinka

Kaip aptarėme aukščiau, dažnas kūrimo neapibrėžtumo šaltinis yra "priklausomybės", kurių neužfiksuoja kūrimo įrankis. Dažniausiai pasitaikantys pavyzdžiai yra C susietos sistemos bibliotekos, tačiau kiti vietiniai aplinkos veiksniai, tokie kaip aplinkos kintamųjų nustatymai ir failai, nepatenkantys į versijų kontrolės sritį, taip pat gali turėti įtakos kūrimui.

Paprastas būdas sumažinti šią problemą yra paleisti komponavimą žinomame, nekintančiame konteineryje. Pavyzdžiui, konteinerio vykdymo laikas, pvz., "Docker", padeda užtikrinti, kad visi naudotų tas pačias sistemos priklausomybes, tuos pačius aplinkos kintamuosius ir veiktų toje pačioje failų sistemoje. Be to, nesunku patikrinti, ar konteinerio turinys atitinka žinomą geros konstrukcijos konteinerį, o prireikus konteinerį galima lengvai visiškai pašalinti iš žinomo gero vaizdo ir atkurti iš naujo.

Atminkite, kad mes labai aiškiai kalbame apie žinomus konteinerius ar žinomus konteinerių vaizdus. Neužtenka tik pateikti "Dockerfile"! Kodėl? Nes pats "Dockerfile" neaprašo visiškai atkuriamo "Docker" vaizdų kūrimo proceso, nes jie neveikia nekintančioje pasaulinėje aplinkoje.

Nekintanti pasaulinė aplinka

Kūrimo sistemos dažnai sąveikauja su išorinėmis tarnybomis, kad atliktų tokias užduotis kaip versijų sprendimas ir priklausomybių atsisiuntimas. Tačiau išorinės paslaugos dažnai keičiasi.

Šiandien paleidę apt install nodejs duosite kitokius rezultatus nei praėjusiais metais, o tikriausiai kitais metais taip pat gausite kitokius rezultatus. Štai kodėl patys Dockerfiles negali apibūdinti atkuriamų versijų - paleidus tą patį Dockerfile skirtingais laiko momentais, bus gaunami skirtingi kūrimo rezultatai!

Paprastas sušvelninimas čia yra sukonfigūruoti versiją, kai tik įmanoma, nurodant tikslią versiją (idealiu atveju, tikslią turinio maišą), kad būsimos versijos naudotų tą pačią versiją kaip ir dabartinė versija. Tačiau išorinės paslaugos taip pat gali netikėtai pakeisti savo elgesį - tikrai pesimistiška atkuriama versija paleidžia vidinį vaizdą su kuo daugiau tinklo išteklių.

3 ramstis: išteklių prieinamumas

Tarkime, mūsų konstrukcija yra pakartojama, o pasaulis po kojomis nesikeičia. Viskas, ko mums reikia dabar, yra prieiga prie kūrimo įvesties. Atrodo paprasta, tiesa? Gerai......

Registras kartais nepavyksta

Dauguma mazgų kūrėjų patyrė bent vieną NPM gedimą, kurio metu sutrinka kūrimo vamzdynas be talpyklos ar atspindėjimo NPM paketų. Daugelis mazgų kūrėjų taip pat patyrė kairiojo bloknoto ir klastotės pašalinimus, kurie smarkiai pakenkė NPM ekosistemai ir iš tikrųjų prilygo gedimui.

Vienintelis patikimas būdas sumažinti tokias kūrimo pertraukas yra paleisti savo paketų registro veidrodį. Kai išorinės paslaugos nepasiekiamos, vaizdas gali likti prisijungęs; Kai oficialus registras ištrina seną paketą, veidrodis gali toliau teikti paslaugas. Tas pats principas galioja ir kitoms nuotolinėms paslaugoms: jei nenaudojate savo įvaizdžio, kūrimo vamzdyno prieinamumas yra palyginamas tik su jo paslaugų prieinamumu.

Pasirinkimas paleisti paslaugos vaizdą visada yra subtilus kompromisas. Viena vertus, tokiuose registruose kaip NPM yra specialios inžinerijos ir operacijų komandos, turinčios patirties išlaikyti šias sistemas internete. Kita vertus, daug lengviau paleisti mažą vaizdą nedideliam priklausomybių rinkiniui, nei paleisti visus NPM vaizdus. Turėtumėte priimti veidrodinius sprendimus atsižvelgdami į kiekvienos paslaugos specifiką, atsižvelgdami į istorinių išorinių paslaugų patikimumą ir jūsų komandos pastatų prieinamumą bei personalo poreikius.

Tiekėjai užtikrina maksimalų prieinamumą

Paprastas būdas užtikrinti maksimalų projekto priklausomybių prieinamumą yra įtraukti jas į tiekėją. Dauguma paketų tvarkyklių palaiko tam tikrą "pardavėjo" formą, o tai reiškia, kad užuot pasikliauję atsisiuntimais iš išorinių paslaugų, priklausomybės šaltinio kodą saugome versijų kontrolėje, egzistuojant kartu su mūsų šaltinio kodu. Pavyzdžiui, "Node" tai gali atrodyti kaip node_modules priskyrimas šaltinio kontrolei.

Nors šis sprendimas nėra tobulas (priklausomai nuo to, kaip nustatytas jūsų tiekėjas ir projektas, o tai gali labai apkrauti versijų valdymą), dažnai tai yra paprasčiausias ir lengviausias sprendimas maksimaliam pasiekiamumui.

Nuoroda:

Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.




Ankstesnis:.NET/C# Naudokite "UnsafeAccessor" tik skaitomo lauko turiniui modifikuoti
Kitą:"Angular 18" serijos (32) pasirinktinės formos valdikliai "ControlValueAccessor"
 Savininkas| Publikuota: 2025-4-30 10:10:23 |
Apie pasikartojančių versijų naudojimą kuriant NuGet paketus C#:

Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com