CI runner VPN: tunnel builddan uzoq yashaydimi?
Umumiy CI runner ish vazifalari orasida marshrutlar va jarayonlarni saqlab qoladi. VPN ning oldingi, joriy va keyingi holatlarini rejalashtiring va faqat vazifaga tegishli ulanishni tozalang.
Joylashtirish vazifasi ulanadi, artefaktini nusxalaydi va muvaffaqiyat haqida xabar beradi. U ochgan tunnel keyingi vazifa boshlanganda ham ishlab turishi mumkin, u o‘zgartirgan marshrut esa butun hostga tegishli. build natijasi buyruqni tavsiflaydi, u qoldirib ketgan holatni emas. VPN ni umr ko‘rish muddati bor resurs deb qarang, bosqich boshidagi bitta satr deb emas.
Bu hostda yana nima ishlaydi
Jenkins tuguni bir vaqtda bir nechta ijrochini ishga tushirishi mumkin, host marshrutlari, resolver sozlamalari yoki butun tizim ulanishini o‘zgartirgan vazifa ularni hamma uchun o‘zgartiradi. Boshqa vazifa buni payqaydimi, marshrut va filtrlash siyosatiga bog‘liq, VPN haqidagi umumiy qoidaga emas. Repozitoriyga kirish, artefaktlarga kirish va boshqaruv kanali runner hali ham kerak bo‘lgan alohida talablardir. To‘liq tunnelni tanlashdan oldin ularni joylashtirish manzillari ro‘yxatiga qo‘shing.
Agar boshqaruv kanali tunneldan o‘tsa, loyiha buni ataylab aytishi kerak. Buni orqaga qaytarish paytida aniqlash reja emas. Ikki ro‘yxatni yozing: vazifa maxfiy ravishda nimaga yetishi kerak va runner nima bo‘lishidan qat’i nazar nimaga yetishi kerak.
Bu vazifaga maxfiy kirish umuman kerakmi?
Tunnelni qo‘shishdan oldin build bosqichiga u kerakmi, so‘rang. Maxfiy joylashtirish agenti tasdiqlangan artefaktni olib, joylashtirishni bajarishi mumkin, bu esa umumiy build bosqichini maxfiy tarmoqdan tashqarida ushlab turadi. Bunday bo‘linish har bir build qadamiga tunnel orqali o‘tishni o‘rgatishdan odatda arzonroq.
Chegarani odatdan emas, ish jarayonidan tanlang. Javob yo‘q bo‘lsa, bu sahifaning qolgan qismi kerak emas, va bu mavjud eng yaxshi natijadir.
Keyingi vazifa meros oladigan holat
Vazifadan oldin, u maxfiy kirishga ega bo‘lganda va u tugagandan so‘ng, bekor qilishni ham qo‘shgan holda, nima to‘g‘ri bo‘lishi kerakligini tasvirlang. Yakuniy holat ko‘pincha aytilmay qoladigan holatdir va aynan uni keyingi vazifa meros oladi. Uni birovning xotirasida qoldirish o‘rniga pipeline yoniga yozing.
| 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 |
Ajratilgan yoki bir martalik agent bu chegaralarni joriy qilishni osonlashtiradi. Container yoki namespace faqat uning tarmoq va imtiyoz tartibi o‘zgarishni haqiqatan ajratsa yordam beradi.
Dasturni emas, ulanishni to‘xtating
Bu vazifa boshlagan ulanishni yopish va uning vaqtinchalik hisob ma’lumotlarini olib tashlash uchun pipeline ning yakunlash yo‘lidan foydalaning. Boshqa vazifalar ishlatadigan hostda jarayonlarni dastur nomi bo‘yicha moslashtirmang; aniq ulanishni to‘xtating. Quyidagi ikki buyruq butun tozalashdir va ikkalasi ham jarayonni topishga bog‘liq emas.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
Yakunlash izolyatsiya emas: o‘lgan runner ochgan tunnelini saqlab qoladi, majburan to‘xtatilgan jarayon esa blokni butunlay o‘tkazib yuboradi. Shuning uchun tozalash buyrug‘ining o‘zi butun loyiha bo‘la olmaydi. Amalda bu shunday muvaffaqiyatsiz bo‘ladi: joylashtirish vazifasi nusxalash qadamida bekor qilinadi, yakunlash bloki hech qachon ishlamaydi, va o‘sha hostdagi keyingi vazifa tirik tunnel va yetib bora olmaydigan tarmoqqa qaratilgan marshrut bilan boshlanadi. Xato keyingi buildda 'DNS' muammosiga o‘xshaydi, unga sabab bo‘lgan vazifa tugaganidan soatlar o‘tib.
Profil nomini va hisob ma’lumotlari yo‘lini vazifa chiqishiga yozib qo‘ying. Identifikatorsiz yalang‘och uzish buyrug‘ini keyinchalik audit qilish qiyin. Log satri ham keyingi tekshiruv so‘raganda blok ishlaganini isbotlaydigan narsadir.
Vazifaga hech kim ishlatmaydigan host bering
Bir martalik infratuzilma meros muammosini boshqarish o‘rniga yo‘q qiladi. Har bir vazifa uchun yangi agent marshrutsiz, profilsiz va boshqalarning hisob ma’lumotlarisiz boshlanadi, uni yo‘q qilish esa vazifa qoldirgan hamma narsani tozalaydi. Bu har bir build uchun qimmatroq va bu tozalash kodiga bog‘liq bo‘lmagan chegaraning halol narxidir. Ishlab chiqarish tarmoqlariga tegadigan vazifalar uchun, hodisalar sanalganda, odatda arzonroq variant.
Umumiy runner qolishi kerak bo‘lgan joyda, muvaffaqiyatli nusxalash kabi diqqat bilan nosozlik va bekor qilishni sinab ko‘ring. Sinov keyingi vazifa bu yarim yo‘lda bekor qilinsa nima ko‘rishini ko‘rsatishi kerak. Vazifa uning kirishi va vaqtinchalik holati tugaganda tugaydi, nusxalash buyrug‘i nol qaytarganda emas.