CI-runner VPN: överlever tunneln bygget?
En delad CI-runner behåller rutter och processer mellan jobb. Planera VPN:ets tillstånd före, under och efter jobbet och städa bara den anslutning som jobbet äger.
Ett distributionsjobb ansluter, kopierar sin artefakt och rapporterar framgång. Tunneln det öppnade kan fortfarande vara uppe när nästa jobb startar, och rutten det ändrade tillhör hela värden. Ett byggresultat beskriver kommandot, inte tillståndet det lämnade efter sig. Behandla VPN:et som en resurs med en livstid, inte som en rad i början av ett steg.
Vad mer körs på den här värden
En Jenkins-nod kan köra flera exekutorer samtidigt, och ett jobb som ändrar värdens rutter, resolverinställningar eller en systemomfattande anslutning ändrar dem för alla. Om ett annat jobb märker det beror på rutt- och filtreringspolicyn, inte på en allmän regel om VPN. Åtkomst till kodförrådet, åtkomst till artefakter och styrkanalen är separata krav som runners fortfarande behöver. Lägg till dem i distributionsmållistan innan du väljer en full tunnel.
Om styrkanalen skulle gå genom tunneln måste designen säga det medvetet. Att upptäcka det under en återställning är inte en plan. Skriv ned de två listorna: vad jobbet måste nå privat och vad runnern måste nå oavsett.
Behöver det här jobbet privat åtkomst alls?
Fråga innan du lägger till tunneln om byggsteget behöver den. En privat distributionsagent kan hämta en godkänd artefakt och utföra distributionen, vilket håller det allmänna byggsteget utanför det privata nätet. Den uppdelningen är oftast billigare än att lära varje byggsteg att gå genom en tunnel.
Välj gränsen utifrån arbetsflödet, inte av vana. Om svaret är nej är resten av den här sidan onödig, och det är det bästa tillgängliga utfallet.
Tillståndet som nästa jobb ärver
Beskriv vad som ska gälla före jobbet, medan det har privat åtkomst, och efter att det slutat, inklusive avbrott. Sluttillståndet är det som oftast lämnas outtalat, och det är det som nästa jobb ärver. Skriv det bredvid pipeline i stället för att lämna det i någons minne.
| 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 |
En dedikerad eller engångsagent gör gränserna lättare att upprätthålla. En container eller namnrymd hjälper bara om dess nät- och privilegiearrangemang faktiskt isolerar ändringen.
Stoppa anslutningen, inte programmet
Använd pipelinens avslutningsväg för att stänga anslutningen som det här jobbet startade och ta bort dess tillfälliga uppgifter. Matcha inte processer efter programnamn på en värd som andra jobb använder; stoppa den specifika anslutningen i stället. De två kommandona nedan är hela städningen, och ingen av dem beror på att hitta en process.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
Avslutning är inte isolering: en runner som dör behåller tunneln den öppnade, och en process som tvångsstoppas hoppar över blocket helt. Därför kan städkommandot ensamt inte vara hela designen. Så här misslyckas det i praktiken: ett distributionsjobb avbryts vid kopieringssteget, avslutningsblocket körs aldrig, och nästa jobb på samma värd startar med en levande tunnel och en rutt som pekar på ett nät det inte kan nå. Felet ser ut som ett 'DNS'-problem i nästa bygge, timmar efter att jobbet som orsakade det avslutades.
Anteckna profilnamnet och sökvägen till uppgifterna i jobbets utdata. Ett bart frånkopplingskommando utan identifierare är svårt att granska i efterhand. Loggraden är också det som bevisar att blocket kördes när en senare utredning frågar.
Ge jobbet en värd som ingen annan använder
Engångsinfrastruktur tar bort ärvandeproblemet i stället för att hantera det. En ny agent per jobb startar utan rutt, utan profil och utan någon annans uppgifter, och dess förstöring städar upp vad jobbet än lämnade. Det kostar mer per bygge, och det är det ärliga priset för en gräns som inte beror på städningskod. För jobb som rör produktionsnät är det oftast det billigare alternativet när incidenterna räknas.
Där en delad runner måste finnas kvar, testa fel och avbrott lika noggrant som den lyckade kopieringen. Testet ska visa vad nästa jobb skulle se om det här avbröts halvvägs. Ett jobb är klart när dess åtkomst och tillfälliga tillstånd har upphört, inte när kopieringskommandot returnerar noll.