CI runner VPN: туннель build-тен ұзақ өмір сүре ме?
Ортақ CI runner жұмыстар арасында маршруттар мен процестерді сақтайды. VPN-ның жұмыс алдындағы, кезіндегі және кейінгі күйлерін жоспарлап, тек жұмысқа тиесілі қосылымды тазалаңыз.
Деплой жұмысы қосылады, өз артефактісін көшіреді және сәттілік туралы хабарлайды. Ол ашқан туннель келесі жұмыс басталғанда әлі белсенді болуы мүмкін, ал ол өзгерткен маршрут бүкіл хостқа тиесілі. Build нәтижесі команданы сипаттайды, артында қалдырған күйді емес. VPN-ға өмірлік циклі бар ресурс ретінде қараңыз, кезең басындағы бір жол ретінде емес.
Бұл хостта тағы не жұмыс істейді
Jenkins түйіні бір уақытта бірнеше орындаушыны іске қоса алады, ал хост маршруттарын, resolver параметрлерін немесе жүйелік қосылымды өзгертетін жұмыс оларды барлығы үшін өзгертеді. Басқа жұмыс мұны байқай ма, бұл маршрут және сүзгілеу саясатына байланысты, VPN туралы жалпы ережеге емес. Репозиторийге қатынас, артефактілерге қатынас және басқару арнасы — runner әлі де қажет ететін бөлек талаптар. Толық туннельді таңдамас бұрын оларды деплой мақсаттарының тізіміне қосыңыз.
Егер басқару арнасы туннельден өтетін болса, дизайн мұны әдейі айтуы керек. Оны кері қайтару кезінде анықтау — жоспар емес. Екі тізімді жазыңыз: жұмыс жеке түрде неге жетуі керек және runner қандай жағдайда болса да неге жетуі керек.
Бұл жұмысқа жеке қатынас қажет пе?
Туннель қоспас бұрын build кезеңіне ол қажет пе, соны сұраңыз. Жеке деплой агенті бекітілген артефактіні әкеліп, деплойды орындай алады, бұл жалпы build кезеңін жеке желіден тыс ұстайды. Мұндай бөлу әдетте әр build қадамын туннель арқылы маршруттауға үйретуден арзан.
Шекараны әдеттен емес, жұмыс ағынынан таңдаңыз. Егер жауап жоқ болса, бұл беттің қалғаны қажет емес, және бұл қолжетімді ең жақсы нәтиже.
Келесі жұмыс мұрагерлік ететін күй
Жұмыс алдында, жеке қатынас бар кезінде және ол аяқталғаннан кейін, оның ішінде болдырмауды да қоса, не рас болуы керектігін сипаттаңыз. Соңғы күй — ең жиі айтылмай қалатын күй, және оны келесі жұмыс мұрагерлік етеді. Оны біреудің жадында қалдырудың орнына pipeline жанына жазыңыз.
| 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 |
Арнайы немесе бір реттік агент бұл шекараларды орындауды жеңілдетеді. Контейнер немесе атау кеңістігі тек оның желілік және құқықтық құрылымы өзгерісті шынымен оқшаулағанда ғана көмектеседі.
Қосылымды тоқтатыңыз, бағдарламаны емес
Осы жұмыс ашқан қосылымды жабу және оның уақытша тіркелгі деректерін жою үшін pipeline-ның аяқтау жолын пайдаланыңыз. Басқа жұмыстар пайдаланатын хостта процестерді бағдарлама атымен сәйкестендірмеңіз; оның орнына нақты қосылымды тоқтатыңыз. Төмендегі екі команда — бүкіл тазалау, және ешқайсысы процесті табуға тәуелді емес.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
Аяқтау — оқшаулау емес: өлген runner ашқан туннелін сақтайды, ал күшпен тоқтатылған процесс блокты толығымен өткізіп жібереді. Сондықтан тазалау командасының өзі бүкіл дизайн бола алмайды. Іс жүзінде бұл былай сәтсіз аяқталады: деплой жұмысы көшіру қадамында болдырылмайды, аяқтау блогы ешқашан іске қосылмайды, ал сол хосттағы келесі жұмыс тірі туннельмен және жете алмайтын желіге көрсететін маршрутпен басталады. Ақау келесі build-те 'DNS' мәселесіне ұқсайды, оны тудырған жұмыс аяқталғаннан сағаттар өткен соң.
Профиль атын және тіркелгі деректерінің жолын жұмыстың шығысына жазыңыз. Идентификаторсыз жалаң ажырату командасын кейін аудиттеу қиын. Журнал жолы да блоктың іске қосылғанын дәлелдейтін нәрсе, кейінгі тергеу сұрағанда.
Жұмысқа басқа ешкім пайдаланбайтын хост беріңіз
Бір реттік инфрақұрылым мұрагерлік мәселесін басқарудың орнына жояды. Әр жұмыс үшін жаңа агент маршрутсыз, профильсіз және өзгенің тіркелгі деректерінсіз басталады, ал оны жою жұмыс қалдырғанның бәрін тазалайды. Бұл әр build-ке қымбат түседі, және бұл тазалау кодына тәуелді емес шекараның адал бағасы. Өндірістік желілерге қатысты жұмыстар үшін оқиғаларды санағанда бұл әдетте арзан нұсқа.
Ортақ runner қалатын жерде сәтсіздік пен болдырмауды сәтті көшірудей мұқият тексеріңіз. Тест осы жұмыс жарты жолда болдырылса, келесі жұмыс нені көретінін көрсетуі керек. Жұмыс оның қатынасы мен уақытша күйі аяқталғанда бітеді, көшіру командасы нөл қайтарғанда емес.