Individuali programinė įranga iš šaltinio saugyklų
OpenFactory receptai gali nurodyti Git saugyklą kaip pasirinktinio paketo įvestį palaikomuose atvaizdžių builduose. Tai tiekimo grandinės jautrus kelias: saugyklą, išspręstą revisiją, paketavimo instrukcijas, build priklausomybes ir pagamintą paketą reikia peržiūrėti.
Palaikymas priklauso nuo tikslo. Kai kurie builderiai atmeta šaltinio paketų buildus, įskaitant dabartinius Raspberry Pi ir Proxmox kelius. Prieš pažadėdami, kad paketas bus pagamintas, patvirtinkite galimybę normalizuotame recepte ir build plane.
Recepto forma
Pasirinktinių paketų įrašai yra po os.custom_packages:
{
"os": {
"custom_packages": [
{
"name": "my-agent",
"git_url": "https://github.com/example/my-agent.git",
"branch": "release-1.x"
}
]
}
}Schema priima šakos pavadinimą, ne nekintamą commit lauką. Kontroliuotam release įrašykite tikslų buildo išspręstą commit ir įtraukite jį į saugomą kilmę. Viena judanti šaka nėra atkuriamas įvestis.
Paruoškite saugyklą
Dabartinis paketo kelias tikisi vietinių paketavimo metaduomenų, tinkamų tikslui. Dažni pavyzdžiai: Debian debian/ katalogas arba RPM spec. Tikslus builderio elgesys ir palaikomos tikslo versijos gali keistis, todėl minimalų paketą validuokite diegtoje aplinkoje, o ne remdamiesi statine suderinamumo lentele.
Debian paketavimui peržiūrėkite bent:
debian/controlšaltinio/dvejetainio tapatybei ir priklausomybėms;debian/changelogpaketo versijai;debian/rulesir kitus vykdomuosius maintainer scenarijus;- diegimo manifestus ir systemd vienetus; ir
- licencijavimą ir įtrauktą trečiųjų šalių medžiagą.
RPM paketavimui peržiūrėkite spec šaltinius, build reikalavimus, scriptlets, failų sąrašą ir licencijos metaduomenis.
Nelaikykite, kad saugyklos nuosavybė daro build scenarijus saugius. Paketų buildai vykdo nepatikimą šaltinio ir paketavimo logiką build infrastruktūros izoliacijos riboje.
Kiti paketų valdikliai
Vietiniai paketai
Naudokite os.packages paketams, kuriuos jau tiekia pasirinkta distribucija arba aiškiai sukonfigūruota saugykla:
{
"os": {
"packages": ["curl", "jq"]
}
}Paketų perrašymai
os.package_overrides gali deklaruoti add, remove arba replace:
{
"os": {
"package_overrides": [
{"name": "nano", "action": "replace", "replacement": "neovim"},
{"name": "telnet", "action": "remove"}
]
}
}Override neįrodo, kad priklausomybių sprendimas jo laikėsi. Patikrinkite galutinį paketų inventorių ir absence/presence assertions.
Papildomos saugyklos
os.extra_repos yra pažengęs įvestis. Nepridėkite nepasirašyto HTTP saugyklos kaip senesniuose pavyzdžiuose. Patvirtinta saugyklos integracija reikalauja HTTPS transporto, pritvirtinto pasirašymo rakto, parašų vykdymo, release metaduomenų, tinkamų package manageriui, ir dokumentuotos nuosavybės bei atnaujinimo politikos. Jei dabartinis builderis negali atvaizduoti šių pasitikėjimo kontrolių, nenaudokite saugyklos.
Priėmimo įrodymai
Kiekvienam pasirinktiniam paketui saugokite:
- saugyklos URL ir išspręstą commit;
- šaltinio ir deklaruotos licencijos peržiūrą;
- build aplinkos ir priklausomybių snapshot;
- build žurnalus ir gautą paketo pavadinimą/versiją/architektūrą;
- paketo digest ir saugyklos parašo įrodymus, kur taikoma;
- galutinį atvaizdžio inventorių su įdiegtu paketu;
- service arba vykdomojo failo smoke testus; ir
- pašalinimo ir atnaujinimo elgseną.
Sėkminga šaltinio paketo stadija nepakanka. Atvaizdžio buildas vėliau gali nepanaudoti paketo, o įdiegtas paketas vis tiek gali būti nenaudojamas.
Trikčių šalinimas
- Paketavimo metaduomenys atmesti: validuokite vietinį paketą lokaliai su ta pačia distribucijos release ir architektūra.
- Trūksta build priklausomybės: naudokite priklausomybes iš patvirtintų saugyklų tam tikslui; maintainer scenarijuje tyliai neatsisiųskite bet kokių dvejetainių failų.
- Paketo nėra atvaizdyje: palyginkite pagaminto dvejetainio paketo pavadinimą su normalizuota diegimo užklausa ir galutiniu inventoriau.
- Versija nepasikeitė: atnaujinkite vietinius versijos metaduomenis ir patvirtinkite, kad buvo išspręstas naujas šaltinio commit.
- Service nepavyko: peržiūrėkite jo unit, runtime priklausomybes, leidimus ir guest žurnalus; prieš rebuild pridėkite elgsenos lygio assertion.