Napravi Python wheel izvan mreže, objavi ga unutra
Napravi wheel tamo gdje izvorni kod već jeste, zatim prenesi upravo tu datoteku unutrašnjem izdavaču. Dijestovi i potvrda zatvaraju primopredaju.
Već imate posao izgradnje koji proizvodi wheel i privatni repozitorij koji bi ga trebao primiti. Greška je pustiti drugi posao da ponovo izgradi s grane i nazove rezultat istim izdanjem. Prenesite datoteku koja je testirana, nazovite je po dijestu i zadržite vjerodajnicu za otpremanje unutra. Šetnja ispod prati jedan artefakt od javnog CI runnera do unutrašnjeg izdavača.
Gradi tamo gdje izvorni kod već jeste
Pokrenite izgradnju u poslu koji već ima izvorni kod, alatni lanac i skup testova. Ništa u privatnom repozitoriju ne zahtijeva da taj posao do njega dođe. Instalirajte frontend za izgradnju u okruženje koje projekt već koristi, zatim proizvedite oba formata distribucije ako projekt isporučuje oba.
python -m build --sdist --wheel --outdir dist
python -m twine check dist/*
Držite izlazni direktorij malim i za jednokratnu upotrebu. Jedino što je vrijedno prenijeti su datoteke koje će sljedeći posao objaviti, plus njihovi heševi. Sve ostalo, uključujući virtualna okruženja i keševe, može se ponovo izgraditi iz zabilježene revizije izvornog koda. Vitak artefakt je i lakši za pregled, jer je svaka datoteka u njemu datoteka koju neko može pregledati.
Zabilježite šta ih je proizvelo: naziv paketa i verziju iz naziva datoteka, reviziju izvornog koda i izvršavanje radnog toka koje ih je stvorilo. Sam niz verzije ne identificira datoteku, jer se ista verzija može dva puta izgraditi iz različitih commitova. Upišite reviziju pored naziva datoteka u opisu artefakta i tretirajte taj zapis kao dio primopredaje.
Prenosi bajtove, ne upute za ponovnu izgradnju
Druga izgradnja je drugi proizvod. Vremenske oznake, ugrađene zavisnosti i verzije alata mogu promijeniti bajtove, pa ponovna izgradnja treba vlastite dokaze testiranja i vlastiti pregled. Umjesto toga promovišite pregledane datoteke.
Otpremite datoteke distribucije u spremište artefakata koje pruža vaša CI platforma i dajte unutrašnjem poslu referencu na taj konkretni artefakt, a ne na naziv grane.
sha256sum dist/*.whl dist/*.tar.gz
# keep the digests beside the run id in the artifact description
Ako vaša platforma podržava potpisano porijeklo, zamolite je da atestira artefakt i kasnije provjeri očekivani repozitorij, radni tok i reviziju izvornog koda. GitHubova dokumentacija o atestacijama opisuje tvrdnje tog oblika. Važeći potpis je dokaz porijekla, nije skeniranje ranjivosti i nije odluka o autorizaciji.
Provjeri iznutra prije otpremanja
Unutrašnji posao počinje provjerom da je datoteka koju je primio upravo datoteka koja je odobrena. Uporedite dijestove sa zapisom iz posla izgradnje, a ne sa vrijednošću ponovo izračunatom iz onoga što je stiglo.
sha256sum -c digests.txt
python -m twine check dist/*
Zatim pročitajte metapodatke. Naziv paketa, verzija i deklarisane zavisnosti trebaju odgovarati pregledu koji ste odobrili. Wheel čiji naziv izgleda ispravno, ali su pinovi zavisnosti promijenjeni, drugi je paket s istom etiketom. Ako su se metapodaci pomjerili, tretirajte artefakt kao neodobren i otkrijte koja ga je izgradnja proizvela.
Ako se dijestovi ne poklapaju, zaustavite se. Ne otpremajte i ne popravljajte datoteku ponovnom izgradnjom na licu mjesta; to briše dokaz da se nešto promijenilo u prijenosu. Nepoklapanje znači da su spremište artefakata, korak preuzimanja ili zapis pogrešni, i svaki od njih zaslužuje objašnjenje prije objave izdanja.
Riješi odgovor o dupliciranoj verziji
Privatni repozitoriji obično odbijaju prepisati postojeću verziju i to odbijanje je osobina. Kada otpremanje ne uspije jer verzija postoji, pregledajte zapis repozitorija za tu verziju i uporedite datoteke koje drži s dijestovima koje ste namjeravali objaviti.
Postojeća verzija može značiti da je ranije otpremanje uspjelo i da je odgovor izgubljen, ili da je neko objavio drugačiji sadržaj pod istim brojem.
Ne brišite verziju i ne izmišljajte novi broj da zaobiđete grešku. Odlučite s vlasnikom izdanja je li pohranjeni sadržaj prihvatljiv, zatim zabilježite ishod. Ako se sadržaj razlikuje, imate problem s verzioniranjem, a ne problem s pipelineom.
Drži vjerodajnicu za otpremanje na jednoj strani
Samo unutrašnjem izdavaču trebaju vjerodajnice repozitorija i to samo za vrijeme trajanja otpremanja. Ograničite token na ciljni repozitorij i na operacije otpremanja, držite ga u spremištu tajni unutrašnjeg sistema i ostavite ga potpuno izvan posla izgradnje. Ako posao izgradnje može objavljivati, onda svako ko može promijeniti izgradnju može objavljivati.
Ograničite i koji unutrašnji radni tokovi smiju pokrenuti izdavača. Ručni okidač sa obaveznim odobrenjem razuman je zadani izbor za izdanja; push na bilo koju granu nije.
Završeno izdanje treba ostaviti tri stvari za sobom: datoteke distribucije, njihove dijestove uz reviziju izvornog koda i zapis repozitorija koji pokazuje istu verziju.