Изградете Python wheel надвор од мрежата и објавете го внатре
Изградете го wheel таму каде што веќе е изворниот код, потоа преместете ја точно таа датотека до внатрешен издавач. Хешовите и потврдата го затвораат предавањето.
Веќе имате задача за изградба што произведува wheel и приватно складиште што треба да го прими. Грешката е да дозволите втора задача да изгради повторно од гранка и резултатот да го наречете исто издание. Преместете ја датотеката што е тестирана, именувајте ја според хешот и чувајте ги акредитивите за прикачување внатре. Описот подолу следи еден артефакт од јавен CI извршувач до внатрешен издавач.
Изградувајте таму каде што веќе е изворниот код
Извршете ја изградбата во задачата што веќе го има изворниот код, алатките и множеството тестови. Ништо во приватното складиште не бара таа задача да стигне до него. Инсталирајте го frontend-от за изградба во околината што проектот веќе ја користи, потоа произведете ги двата формати за дистрибуција ако проектот ги доставува двата.
python -m build --sdist --wheel --outdir dist
python -m twine check dist/*
Држете ја излезната папка мала и за еднократна употреба. Единственото нешто што вреди да се пренесе се датотеките што ќе ги објави следната задача, заедно со нивните хешови. Сè друго, вклучително виртуелни околини и кешови, може повторно да се изгради од запишаната ревизија на изворниот код. Витакиот артефакт е и полесно да се прегледа, бидејќи секоја датотека во него е датотека што некој може да ја прегледа.
Запишете што ги произведе: името на пакетот и верзијата од имињата на датотеките, ревизијата на изворниот код и извршувањето на работниот тек што ги создаде. Само низата со верзијата не идентификува датотека, бидејќи истата верзија може двапати да се изгради од различни commit-и. Напишете ја ревизијата покрај имињата на датотеките во описот на артефактот и третирајте го тој запис како дел од предавањето.
Пренесувајте бајти, не упатства за повторна изградба
Втората изградба е втор производ. Временските ознаки, спакуваните зависности и верзиите на алатките можат да ги променат бајтите, па повторната изградба бара свои докази од тестирање и свој преглед. Наместо тоа, промовирајте ги прегледаните датотеки.
Прикачете ги датотеките за дистрибуција во складиштето за артефакти што го нуди вашата CI платформа и дајте и на внатрешната задача упатување до токму тој артефакт, а не име на гранка.
sha256sum dist/*.whl dist/*.tar.gz
# keep the digests beside the run id in the artifact description
Ако вашата платформа поддржува потпишано потекло, побарајте да го потврди артефактот и подоцна да ги провери очекуваното складиште, работниот тек и ревизијата на изворниот код. Документацијата на GitHub за потврди опишува тврдења од тој облик. Важечкиот потпис е доказ за потекло, не е скенирање за ранливости и не е одлука за авторизација.
Проверете внатре пред прикачувањето
Внатрешната задача започнува со проверка дека примената датотека е датотеката што е одобрена. Споредете ги хешовите со записот од задачата за изградба, а не со вредност повторно пресметана од она што пристигна.
sha256sum -c digests.txt
python -m twine check dist/*
Потоа прочитајте ги метаподатоците. Името на пакетот, верзијата и декларираните зависности треба да одговараат на прегледот што го одобривте. Wheel чие име изгледа точно, но чиишто пинови на зависности се промениле е друг пакет со истата етикета. Ако метаподатоците се поместиле, третирајте го артефактот како неодобрен и откријте која изградба го произвела.
Ако хешовите не се поклопуваат, запрете. Не прикачувајте и не поправајте ја датотеката со повторна изградба на самото место; тоа го брише доказот дека нешто се променило при преносот. Несовпаѓањето значи дека складиштето за артефакти, чекорот за преземање или записот се погрешни и секој од нив заслужува објаснување пред да се објави издание.
Решете го одговорот за дупликат верзија
Приватните складишта обично одбиваат да препишат постоечка верзија и тоа одбивање е карактеристика. Кога прикачувањето не успее затоа што верзијата постои, прегледајте го записот на складиштето за таа верзија и споредете ги датотеките што ги држи со хешовите што сте имале намера да ги објавите.
Постоечката верзија може да значи дека претходното прикачување успеало и одговорот се изгубил, или дека некој објавил различен содржински материјал под истиот број.
Не ја бришете верзијата и не измислувајте нов број за да ја заобиколите грешката. Одлучете со сопственикот на изданието дали зачуваната содржина е прифатлива, потоа запишете го исходот. Ако содржината се разликува, имате проблем со верзионирање, а не проблем со pipeline.
Чувајте ги акредитивите за прикачување на едната страна
Само на внатрешниот издавач му требаат акредитиви за складиштето и тоа само за времетраењето на прикачувањето. Ограничете го токенот на целното складиште и на операциите за прикачување, чувајте го во складиштето за тајни на внатрешниот систем и држете го целосно надвор од задачата за изградба. Ако задачата за изградба може да објавува, тогаш секој што може да ја смени изградбата може да објавува.
Ограничете и кои внатрешни работни текови смеат да го стартуваат издавачот. Рачен активатор со задолжително одобрување е разумна основна поставка за изданија; push во која било гранка не е.
Завршеното издание треба да остави три работи: датотеките за дистрибуција, нивните хешови со ревизијата на изворниот код и запис во складиштето што ја покажува истата верзија.