Sukurkite Python wheel už tinklo ir paskelbkite jį viduje
Sukurkite wheel ten, kur jau yra išeities kodas, tada perkelkite būtent tą failą vidiniam leidėjui. Santraukos ir kvitas uždaro perdavimą.
Jau turite kūrimo užduotį, kuri gamina wheel, ir privatų saugyklą, kuri turėtų jį gauti. Klaida yra leisti antrai užduočiai perstatyti iš šakos ir pavadinti rezultatą ta pačia laida. Perkelkite failą, kuris buvo išbandytas, pavadinkite jį pagal santrauką ir laikykite įkėlimo prisijungimo duomenis viduje. Toliau pateiktas aprašymas seka vieną artefaktą nuo viešo CI vykdyklės iki vidinio leidėjo.
Kurkite ten, kur jau yra išeities kodas
Vykdykite kūrimą toje užduotyje, kuri jau turi išeities kodą, įrankių grandinę ir testų rinkinį. Niekas privačioje saugykloje nereikalauja, kad ta užduotis ją pasiektų. Įdiekite kūrimo frontendą į aplinką, kurią projektas jau naudoja, tada sukurkite abu platinimo formatus, jei projektas teikia abu.
python -m build --sdist --wheel --outdir dist
python -m twine check dist/*
Laikykite išvesties katalogą mažą ir vienkartinį. Vieninteliai dalykai, kuriuos verta perduoti toliau, yra failai, kuriuos paskelbs kita užduotis, ir jų maišos. Visa kita, įskaitant virtualias aplinkas ir podėlius, galima perstatyti iš užfiksuotos išeities kodo versijos. Lieknas artefaktas taip pat lengviau peržiūrimas, nes kiekvienas jame esantis failas yra failas, kurį kas nors gali patikrinti.
Užfiksuokite, kas juos pagamino: paketo pavadinimą ir versiją iš failų pavadinimų, išeities kodo versiją ir darbo eigos vykdymą, kuris juos sukūrė. Vien versijos eilutė failo neidentifikuoja, nes tą pačią versiją galima du kartus sukurti iš skirtingų commitų. Įrašykite versiją šalia failų pavadinimų artefakto aprašyme ir laikykite tą įrašą perdavimo dalimi.
Perkelkite baitus, o ne perstatymo instrukcijas
Antras kūrimas yra antras produktas. Laiko žymos, įtrauktos priklausomybės ir įrankių versijos gali pakeisti baitus, todėl perstatymui reikia savo testavimo įrodymų ir savo peržiūros. Vietoj to perkelkite jau peržiūrėtus failus.
Įkelkite platinimo failus į artefaktų saugyklą, kurią teikia jūsų CI platforma, ir duokite vidinei užduočiai nuorodą į tą konkretų artefaktą, o ne į šakos pavadinimą.
sha256sum dist/*.whl dist/*.tar.gz
# keep the digests beside the run id in the artifact description
Jei jūsų platforma palaiko pasirašytą kilmę, paprašykite jos patvirtinti artefaktą ir vėliau patikrinti laukiamą saugyklą, darbo eigą ir išeities kodo versiją. GitHub patvirtinimų dokumentacija aprašo tokios formos teiginius. Galiojantis parašas yra kilmės įrodymas, o ne pažeidžiamumų skenavimas ir ne autorizacijos sprendimas.
Patikrinkite viduje prieš įkeldami
Vidinė užduotis pradedama tikrinant, ar gautas failas yra patvirtintas failas. Palyginkite santraukas su kūrimo užduoties įrašu, o ne su reikšme, perskaičiuota iš to, kas atvyko.
sha256sum -c digests.txt
python -m twine check dist/*
Tada perskaitykite metaduomenis. Paketo pavadinimas, versija ir deklaruotos priklausomybės turėtų atitikti peržiūrą, kurią patvirtinote. Wheel, kurio pavadinimas atrodo teisingas, bet priklausomybių fiksavimas pasikeitė, yra kitas paketas su ta pačia etikete. Jei metaduomenys pasislinko, laikykite artefaktą nepatvirtintu ir išsiaiškinkite, kuris kūrimas jį pagamino.
Jei santraukos nesutampa, sustokite. Neįkelkite ir netaisykite failo perstatydami jį vietoje; tai ištrina įrodymą, kad pervežant kažkas pasikeitė. Nesutapimas reiškia, kad artefaktų saugykla, atsisiuntimo žingsnis arba įrašas yra neteisingi, ir kiekvienas jų nusipelno paaiškinimo prieš paskelbiant laidą.
Spręskite pasikartojančios versijos atsakymą
Privačios saugyklos paprastai atsisako perrašyti esamą versiją, ir tas atsisakymas yra funkcija. Kai įkėlimas nepavyksta, nes versija jau yra, peržiūrėkite saugyklos įrašą apie tą versiją ir palyginkite jame laikomus failus su santraukomis, kurias ketinote paskelbti.
Esama versija gali reikšti, kad ankstesnis įkėlimas pavyko ir atsakymas buvo prarastas, arba kad kas nors paskelbė kitą turinį tuo pačiu numeriu.
Netrinkite versijos ir neišgalvokite naujo numerio klaidai apeiti. Nuspręskite su laidos savininku, ar saugomas turinys priimtinas, tada užfiksuokite rezultatą. Jei turinys skiriasi, turite versijavimo problemą, o ne pipeline problemą.
Laikykite įkėlimo prisijungimo duomenis vienoje pusėje
Saugyklos prisijungimo duomenų reikia tik vidiniam leidėjui ir tik įkėlimo trukmę. Apribokite prieigos raktą tiksline saugykla ir įkėlimo operacijomis, laikykite jį vidinės sistemos slaptųjų saugykloje ir visiškai laikykite už kūrimo užduoties ribų. Jei kūrimo užduotis gali skelbti, tai gali skelbti ir kiekvienas, kuris gali pakeisti kūrimą.
Apribokite ir tai, kurios vidinės darbo eigos gali paleisti leidėją. Rankinis paleidiklis su privalomu patvirtinimu yra pagrįstas numatytasis nustatymas laidoms; push į bet kurią šaką – ne.
Užbaigta laida turėtų palikti tris dalykus: platinimo failus, jų santraukas su išeities kodo versija ir saugyklos įrašą, rodantį tą pačią versiją.