CI-rula VPN: ĉu la tunelo pluvivas la konstruon?
Komuna CI-rulo konservas itinerojn kaj procezojn inter taskoj. Planu la statojn de la VPN antaŭ, dum kaj post la tasko, kaj purigu nur la konekton, kiun la tasko posedas.
Muntada tasko konektas, kopias sian artefakton kaj raportas sukceson. La tunelo, kiun ĝi malfermis, povas ankoraŭ esti aktiva kiam la sekva tasko komenciĝas, kaj la itinero, kiun ĝi ŝanĝis, apartenas al la tuta gastiganto. Konstrua rezulto priskribas la komandon, ne la staton, kiun ĝi postlasis. Traktu la VPN kiel rimedon kun vivdaŭro, ne kiel unu linion ĉe la komenco de stadio.
Kio alie funkcias sur ĉi tiu gastiganto
Jenkins-nodo povas funkciigi plurajn plenumilojn samtempe, kaj tasko, kiu ŝanĝas gastigantajn itinerojn, agordojn de la solvilo aŭ tutsisteman konekton, ŝanĝas ilin por ĉiuj. Ĉu alia tasko rimarkos tion dependas de la itinera kaj filtra politiko, ne de ĝenerala regulo pri VPN-oj. Alirado al la deponejo, alirado al artefaktoj kaj la stirkanalo estas apartaj postuloj, kiujn la rula ankoraŭ bezonas. Aldonu ilin al la listo de muntadaj celoj antaŭ ol elekti plenan tunelon.
Se la stirkanalo trapasus la tunelon, la dezajno devas tion diri konscie. Malkovri tion dum restarigo ne estas plano. Skribu la du listojn: kion la tasko devas atingi private, kaj kion la rula devas atingi sendepende.
Ĉu ĉi tiu tasko entute bezonas privatan aliron?
Demandu antaŭ ol aldoni la tunelon, ĉu la konstrua stadio bezonas ĝin. Privata muntada agento povas preni aprobitan artefakton kaj plenumi la muntadon, kio tenas la ĝeneralan konstruan stadion ekster la privata reto. Tiu divido kutime estas pli malmultekosta ol instrui ĉiun konstruan paŝon itinere tra tunelo.
Elektu la limon el la laborfluo, ne el kutimo. Se la respondo estas ne, la resto de ĉi tiu paĝo estas nenecesa, kaj tio estas la plej bona havebla rezulto.
La stato, kiun heredas la sekva tasko
Priskribu, kio devas validi antaŭ la tasko, dum ĝi havas privatan aliron, kaj post kiam ĝi finiĝos, inkluzive de nuligo. La fina stato estas tiu plej ofte implicita, kaj ĝi estas tiu, kiun heredas la sekva tasko. Skribu ĝin apud la pipeline anstataŭ lasi ĝin en ies memoro.
| 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 |
Dediĉita aŭ unuuzada agento faciligas la plenumigon de tiuj limoj. Ujo aŭ nomspaco helpas nur se ĝia reta kaj privilegia aranĝo vere izolas la ŝanĝon.
Haltigu la konekton, ne la programon
Uzu la finan vojon de la pipeline por fermi la konekton, kiun ĉi tiu tasko komencis, kaj forigi ĝiajn portempajn akreditaĵojn. Ne parigu procezojn laŭ programa nomo sur gastiganto, kiun uzas aliaj taskoj; haltigu la konkretan konekton. La du komandoj sube estas la tuta purigado, kaj neniu dependas de trovi procezon.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
Finigo ne estas izolado: rula, kiu mortas, konservas la tunelon, kiun ĝi malfermis, kaj procezo haltigita perforte tute preterpasas la blokon. Tial la puriga komando sola ne povas esti la tuta dezajno. Jen kiel ĝi fiaskas en praktiko: muntada tasko nuliĝas ĉe la kopia paŝo, la finiga bloko neniam funkcias, kaj la sekva tasko sur la sama gastiganto komenciĝas kun viva tunelo kaj itinero, kiu montras al reto, kiun ĝi ne povas atingi. La fiasko aspektas kiel 'DNS'-problemo en la sekva konstruo, horojn post kiam la tasko, kiu kaŭzis ĝin, finiĝis.
Registru la profilnomon kaj la vojon de la akreditaĵo en la eligon de la tasko. Nuda malkonekta komando sen identigilo estas malfacile revidebla poste. La protokola linio ankaŭ estas tio, kio pruvas, ke la bloko funkciis, kiam posta esploro demandas.
Donu al la tasko gastiganton, kiun neniu alia uzas
Forĵetebla infrastrukturo forigas la heredan problemon anstataŭ administri ĝin. Freŝa agento por ĉiu tasko komenciĝas sen itinero, sen profilo kaj sen fremdaj akreditaĵoj, kaj ĝia detruo purigas tion, kion la tasko lasis. Tio kostas pli por ĉiu konstruo, kaj ĝi estas la honesta prezo de limo, kiu ne dependas de puriga kodo. Por taskoj, kiuj tuŝas produktadajn retojn, ĝi kutime estas la pli malmultekosta opcio post kiam incidentoj estas kalkulitaj.
Tie, kie komuna rula devas resti, testu fiaskon kaj nuligon same zorge kiel la sukcesan kopiadon. La testo devus montri, kion la sekva tasko vidus, se ĉi tiu estus nuligita duonvoje. Tasko finiĝas, kiam ĝia aliro kaj portempa stato finiĝis, ne kiam la kopia komando redonas nulon.