Izveidojiet Python wheel ārpus tīkla un publicējiet to iekšpusē
Izveidojiet wheel tur, kur jau atrodas pirmkods, pēc tam pārvietojiet tieši šo failu pie iekšējā izdevēja. Kopsavilkumi un kvīts noslēdz nodošanu.
Jums jau ir būvēšanas darbs, kas ražo wheel, un privāta krātuve, kurai tas būtu jāsaņem. Kļūda ir ļaut otram darbam pārbūvēt no zara un nosaukt rezultātu par to pašu laidienu. Pārvietojiet failu, kas tika pārbaudīts, nosaucie to pēc kopsavilkuma un turiet augšupielādes akreditācijas datus iekšpusē. Zemāk aprakstītais ceļš seko vienam artefaktam no publiska CI izpildītāja līdz iekšējam izdevējam.
Būvējiet tur, kur jau atrodas pirmkods
Palaidiet būvēšanu tajā darbā, kuram jau ir pirmkods, rīku ķēde un testu kopa. Nekas privātajā krātuvē neprasa, lai šis darbs tai piekļūtu. Instalējiet būvēšanas frontend vidē, ko projekts jau izmanto, pēc tam izveidojiet abus izplatīšanas formātus, ja projekts piegādā abus.
python -m build --sdist --wheel --outdir dist
python -m twine check dist/*
Turiet izvades mapi mazu un vienreizēju. Vienīgais, ko ir vērts nodot tālāk, ir faili, ko publicēs nākamais darbs, un to jaucējkodi. Visu pārējo, tostarp virtuālās vides un kešatmiņas, var pārbūvēt no ierakstītās pirmkoda versijas. Plicis artefakts ir arī vieglāk pārskatāms, jo katrs fails tajā ir fails, ko kāds var apskatīt.
Ierakstiet, kas tos radīja: pakotnes nosaukumu un versiju no failu nosaukumiem, pirmkoda versiju un darbplūsmas izpildi, kas tos izveidoja. Tikai versijas virkne failu neidentificē, jo vienu un to pašu versiju var divreiz izveidot no dažādiem commitiem. Ierakstiet versiju blakus failu nosaukumiem artefakta aprakstā un uzskatiet šo ierakstu par nodošanas daļu.
Pārvietojiet baitus, nevis norādes pārbūvēt
Otra būvēšana ir otrs produkts. Laika zīmogi, iekļautās atkarības un rīku versijas var mainīt baitus, tāpēc pārbūvei nepieciešami savi testēšanas pierādījumi un sava pārskatīšana. Tā vietā virziet tālāk jau pārskatītos failus.
Augšupielādējiet izplatīšanas failus artefaktu krātuvē, ko nodrošina jūsu CI platforma, un dodiet iekšējam darbam atsauci uz tieši šo artefaktu, nevis uz zara nosaukumu.
sha256sum dist/*.whl dist/*.tar.gz
# keep the digests beside the run id in the artifact description
Ja jūsu platforma atbalsta parakstītu izcelsmi, lūdziet tai apliecināt artefaktu un vēlāk pārbaudīt gaidīto krātuvi, darbplūsmu un pirmkoda versiju. GitHub apliecinājumu dokumentācija apraksta šādas formas apgalvojumus. Derīgs paraksts ir izcelsmes pierādījums, nevis ievainojamību skenēšana un nevis autorizācijas lēmums.
Pārbaudiet iekšpusē pirms augšupielādes
Iekšējais darbs sākas ar pārbaudi, vai saņemtais fails ir apstiprinātais fails. Salīdziniet kopsavilkumus ar būvēšanas darba ierakstu, nevis ar vērtību, kas pārrēķināta no tā, kas ieradās.
sha256sum -c digests.txt
python -m twine check dist/*
Pēc tam izlasiet metadatus. Pakotnes nosaukumam, versijai un deklarētajām atkarībām jāatbilst pārskatīšanai, ko apstiprinājāt. Wheel, kura nosaukums izskatās pareizs, bet atkarību piesaistes ir mainījušās, ir cita pakotne ar to pašu etiķeti. Ja metadati ir pārvietojušies, uzskatiet artefaktu par neapstiprinātu un noskaidrojiet, kura būvēšana to radīja.
Ja kopsavilkumi nesakrīt, apstājieties. Neaugšupielādējiet un nelabojiet failu, pārbūvējot to uz vietas; tas izdzēš pierādījumu, ka pārvadāšanas laikā kaut kas mainījās. Neatbilstība nozīmē, ka artefaktu krātuve, lejupielādes solis vai ieraksts ir nepareizs, un katrs no tiem ir pelnījis skaidrojumu pirms laidiena publicēšanas.
Izlemiet atbildi par dublētu versiju
Privātas krātuves parasti atsakās pārrakstīt esošu versiju, un šī atteikšanās ir funkcija. Kad augšupielāde neizdodas, jo versija jau ir, apskatiet krātuves ierakstu par šo versiju un salīdziniet tajā glabātos failus ar kopsavilkumiem, ko grasījāties publicēt.
Esoša versija var nozīmēt, ka iepriekšējā augšupielāde izdevās un atbilde pazuda, vai ka kāds publicēja citu saturu zem tā paša numura.
Nedzēsiet versiju un neizgudrojiet jaunu numuru, lai apietu kļūdu. Izlemiet kopā ar laidiena īpašnieku, vai glabātais saturs ir pieņemams, pēc tam ierakstiet rezultātu. Ja saturs atšķiras, jums ir versiju problēma, nevis pipeline problēma.
Turiet augšupielādes akreditācijas datus vienā pusē
Krātuves akreditācijas dati nepieciešami tikai iekšējam izdevējam un tikai augšupielādes laikā. Ierobežojiet žetonu ar mērķa krātuvi un augšupielādes darbībām, glabājiet to iekšējās sistēmas noslēpumu glabātavā un turiet to pilnībā ārpus būvēšanas darba. Ja būvēšanas darbs var publicēt, tad publicēt var ikviens, kas var mainīt būvēšanu.
Ierobežojiet arī to, kuras iekšējās darbplūsmas drīkst palaist izdevēju. Manuāls palaidējs ar obligātu apstiprinājumu ir saprātīga noklusējuma vērtība laidieniem; push uz jebkuru zaru nav.
Pabeigtajam laidienam jāatstāj trīs lietas: izplatīšanas faili, to kopsavilkumi kopā ar pirmkoda versiju un krātuves ieraksts, kas rāda to pašu versiju.