CI-hardloper-VPN: oorleef die tonnel die bou?
'n Gedeelde CI-hardloper hou roetes en prosesse tussen take. Beplan die VPN se toestand voor, tydens en na die werk, en ruim net die verbinding op wat die taak besit.
'n Ontplooiingstaak verbind, kopieer sy artefak en rapporteer sukses. Die tonnel wat dit oopgemaak het, kan nog bestaan wanneer die volgende taak begin, en die roete wat dit verander het, behoort aan die hele gasheer. 'n Bouresultaat beskryf die opdrag, nie die toestand wat dit agtergelaat het nie. Behandel die VPN as 'n hulpbron met 'n leeftyd, nie as een reël aan die begin van 'n stadium nie.
Wat anders op hierdie gasheer loop
'n Jenkins-node kan verskeie uitvoerders gelyktydig laat loop, en 'n taak wat gasheerreutes, oplosserinstellings of 'n stelselwye verbinding verander, verander dit vir almal. Of 'n ander taak dit raaksien, hang van die roete- en filterbeleid af, nie van 'n algemene reël oor VPN's nie. Pakhuistoegang, artefaktoegang en die beheerkanaal is afsonderlike vereistes wat die hardloper steeds nodig het. Voeg dit by die lys van ontplooiingsbestemmings voordat jy 'n volledige tonnel kies.
As die beheerkanaal die tonnel sou kruis, moet die ontwerp dit doelbewus sê. Om dit tydens 'n terugrol te ontdek, is nie 'n plan nie. Skryf die twee lyste neer: wat die taak privaat moet bereik, en wat die hardloper in elk geval moet bereik.
Het hierdie taak hoegenaamd private toegang nodig?
Vra voor jy die tonnel byvoeg of die boutstadium dit nodig het. 'n Private ontplooiingsagent kan 'n goedgekeurde artefak haal en die ontplooiing doen, wat die algemene boutstadium buite die private netwerk hou. Daardie splitsing is gewoonlik goedkoper as om elke boustap te leer om deur 'n tonnel te roeteer.
Kies die grens op grond van die werkvloei eerder as uit gewoonte. As die antwoord nee is, is die res van hierdie bladsy onnodig, en dit is die beste uitkoms wat beskikbaar is.
Die toestand wat die volgende taak erf
Beskryf wat waar moet wees voor die taak, terwyl dit private toegang het, en nadat dit eindig, insluitend kansellasie. Die eindtoestand is die een wat die meeste implisiet gelaat word, en dit is die een wat die volgende taak erf. Skryf dit langs die pyplyn neer in plaas daarvan om dit in iemand se geheue te laat.
| Moment | What proves it | What leaks if it is skipped |
|---|---|---|
| Job start: pre-flight route check | The route table shows no tunnel from an earlier job, and the profile list is empty | A stale route sends deployment traffic into a dead tunnel |
| Job end: disconnect and shred | The profile is down and the temporary key file is gone | The next job inherits an open tunnel and a usable credential |
| Cancelled job: reboot or disposal | The host is replaced or rebooted before the next job starts | A killed process leaves the tunnel up with no owner |
'n Toegewyde of wegdoenbare agent maak daardie grense makliker om af te dwing. 'n Houer of naamruimte help net as sy netwerk- en voorregreëling die verandering werklik isoleer.
Stop die verbinding, nie die program nie
Gebruik die pyplyn se finaliseringstrajek om die verbinding te sluit wat hierdie taak begin het en sy tydelike geloofsbriewe te verwyder. Moet nie prosesse volgens programnaam pas op 'n gasheer wat ander take gebruik nie; stop eerder die spesifieke verbinding. Die twee opdragte hieronder is die hele opruiming, en nie een hang daarvan af om 'n proses te vind nie.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
Finalisering is nie isolasie nie: 'n hardloper wat sterf, hou die tonnel wat hy oopgemaak het, en 'n proses wat met geweld gestop word, slaan die blok heeltemal oor. Daarom kan die opruimingsopdrag alleen nie die hele ontwerp wees nie. Hier is hoe dit in die praktyk misluk: 'n ontplooiingstaak word by die kopiestap gekanselleer, die finaliseringsblok loop nooit nie, en die volgende taak op dieselfde gasheer begin met 'n lewendige tonnel en 'n roete wat na 'n netwerk wys wat dit nie kan bereik nie. Die fout lyk soos 'n 'DNS'-probleem in die volgende bou, ure nadat die taak wat dit veroorsaak het, klaar was.
Teken die profielnaam en die geloofsbriefpad in die taakuitset aan. 'n Blote ontkoppelopdrag sonder enige identifiseerder is later moeilik om te oudit. Die logreël is ook wat bewys die blok het geloop wanneer 'n latere ondersoek dit vra.
Gee die taak 'n gasheer wat niemand anders gebruik nie
Wegdoenbare infrastruktuur verwyder die erfenisprobleem eerder as om dit te bestuur. 'n Vars agent per taak begin sonder 'n roete, sonder 'n profiel en sonder geloofsbriewe van iemand anders, en die vernietiging daarvan ruim op wat die taak gelaat het. Dit kos meer per bou, en dit is die eerlike prys van 'n grens wat nie van opruimingskode afhang nie. Vir take wat produksienetwerke raak, is dit gewoonlik die goedkoper opsie sodra voorvalle getel word.
Waar 'n gedeelde hardloper moet bly, toets mislukking en kansellasie net so sorgvuldig as die suksesvolle kopie. Die toets moet wys wat die volgende taak sou sien as hierdie een halfpad gekanselleer is. 'n Taak is klaar wanneer sy toegang en tydelike toestand geëindig het, nie wanneer die kopieopdrag nul teruggee nie.