CI-ajurin VPN: jääkö tunneli buildin jälkeen?
Jaettu CI-ajuri säilyttää reitit ja prosessit töiden välillä. Suunnittele VPN:n tilat ennen työtä, sen aikana ja sen jälkeen ja siivoa vain yhteys, jonka työ omistaa.
Käyttöönottotyö yhdistää, kopioi artefaktinsa ja raportoi onnistumisen. Sen avaama tunneli voi olla yhä pystyssä, kun seuraava työ alkaa, ja sen muuttama reitti kuuluu koko isännälle. Buildin tulos kuvaa komennon, ei tilaa, jonka se jätti jälkeensä. Käsittele VPN:ää elinkaaren omaavana resurssina, älä yhtenä rivinä vaiheen alussa.
Mitä muuta tällä isännällä pyörii
Jenkins-solmu voi ajaa useita suorittajia kerralla, ja työ, joka muuttaa isännän reittejä, resolverin asetuksia tai järjestelmänlaajuista yhteyttä, muuttaa niitä kaikille. Huomaako toinen työ sen, riippuu reitti- ja suodatuskäytännöstä, ei yleisestä VPN-säännöstä. Repositorion käyttö, artefaktien käyttö ja ohjauskanava ovat erillisiä vaatimuksia, joita ajuri yhä tarvitsee. Lisää ne käyttöönoton kohdeluetteloon ennen kuin valitset täyden tunnelin.
Jos ohjauskanava kulkisi tunnelin läpi, suunnittelun on sanottava se tarkoituksella. Sen löytäminen peruutuksen aikana ei ole suunnitelma. Kirjoita kaksi listaa: mitä työn on saavutettava yksityisesti ja mitä ajurin on saavutettava joka tapauksessa.
Tarvitseeko tämä työ ylipäätään yksityistä käyttöä?
Kysy ennen tunnelin lisäämistä, tarvitseeko build-vaihe sitä. Yksityinen käyttöönottoagentti voi hakea hyväksytyn artefaktin ja suorittaa käyttöönoton, mikä pitää yleisen build-vaiheen poissa yksityisestä verkosta. Tämä jako on yleensä halvempi kuin opettaa jokainen build-vaihe reitittämään tunnelin kautta.
Valitse raja työnkulusta, älä tavasta. Jos vastaus on ei, tämän sivun loppuosa on tarpeeton, ja se on paras saatavilla oleva tulos.
Tila, jonka seuraava työ perii
Kuvaile, mitä pitää olla totta ennen työtä, sen aikana yksityisen käytön ollessa voimassa ja sen päätyttyä, mukaan lukien peruutus. Lopputila on se, joka useimmin jää sanomatta, ja juuri sen seuraava työ perii. Kirjoita se pipeline:n viereen sen sijaan, että jättäisit sen jonkun muistiin.
| 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 |
Omistettu tai kertakäyttöinen agentti tekee näiden rajojen valvomisesta helpompaa. Kontti tai nimiavaruus auttaa vain, jos sen verkko- ja käyttöoikeusjärjestely todella eristää muutoksen.
Pysäytä yhteys, älä ohjelmaa
Käytä pipeline:n viimeistelypolkua sulkeaksesi yhteyden, jonka tämä työ aloitti, ja poistaaksesi sen väliaikaiset tunnistetiedot. Älä sovita prosesseja ohjelman nimen mukaan isännällä, jota muut työt käyttävät; pysäytä sen sijaan kyseinen yhteys. Kaksi alla olevaa komentoa ovat koko siivous, eikä kumpikaan riipu prosessin löytämisestä.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
Viimeistely ei ole eristystä: kuoleva ajuri pitää avaamansa tunnelin, ja väkisin pysäytetty prosessi ohittaa lohkon kokonaan. Siksi pelkkä siivouskomento ei voi olla koko suunnittelu. Näin se epäonnistuu käytännössä: käyttöönottotyö peruutetaan kopiointivaiheessa, viimeistelylohko ei koskaan aja, ja seuraava työ samalla isännällä alkaa elävällä tunnelilla ja reitillä, joka osoittaa verkkoon, johon se ei pääse. Vika näyttää 'DNS'-ongelmalta seuraavassa buildissa, tunteja sen jälkeen kun sen aiheuttanut työ päättyi.
Kirjaa profiilin nimi ja tunnistetietojen polku työn tulosteeseen. Pelkkä katkaisukomento ilman tunnistetta on vaikea auditoida jälkeenpäin. Lokirivi on myös se, mikä todistaa lohkon ajaneen, kun myöhempi tutkinta kysyy sitä.
Anna työlle isäntä, jota kukaan muu ei käytä
Kertakäyttöinen infrastruktuuri poistaa periytymisongelman sen sijaan että hallitsisi sitä. Tuore agentti työtä kohden alkaa ilman reittiä, ilman profiilia ja ilman kenenkään muun tunnistetietoja, ja sen tuhoaminen siivoaa sen, mitä työ jätti. Se maksaa enemmän buildia kohden, ja se on rehellinen hinta rajalle, joka ei riipu siivouskoodista. Tuotantoverkkoja koskettaville töille se on yleensä halvempi vaihtoehto, kun tapaukset lasketaan.
Missä jaetun ajurin on pysyttävä, testaa epäonnistuminen ja peruutus yhtä huolellisesti kuin onnistunut kopiointi. Testin pitäisi näyttää, mitä seuraava työ näkisi, jos tämä peruutettaisiin puolivälissä. Työ on valmis, kun sen käyttö ja väliaikainen tila ovat päättyneet, ei silloin kun kopiointikomento palauttaa nollan.