Տեղադրման աշխատանքը միանում է, պատճենում իր արտեֆակտը և հաղորդում հաջողության մասին։ Բացված թունելը կարող է դեռ ակտիվ լինել, երբ սկսվում է հաջորդ աշխատանքը, և փոփոխված երթուղին պատկանում է ամբողջ հոսթին։ Build-ի արդյունքը նկարագրում է հրամանը, ոչ այն վիճակը, որը նա թողել է իր հետևում։ Վերաբերվեք VPN-ին որպես կյանքի տևողություն ունեցող ռեսուրսի, ոչ որպես փուլի սկզբում մեկ տողի։

Ինչ էլ աշխատում է այս հոսթում

Jenkins-ի հանգույցը կարող է միաժամանակ մի քանի կատարող գործարկել, և աշխատանքը, որը փոխում է հոսթի երթուղիները, resolver-ի կարգավորումները կամ համակարգային կապը, փոխում է դրանք բոլորի համար։ Թե արդյոք մեկ այլ աշխատանք դա կնկատի, կախված է երթուղու և զտման քաղաքականությունից, ոչ VPN-ների մասին ընդհանուր կանոնից։ Պահոցի հասանելիությունը, արտեֆակտների հասանելիությունը և կառավարման ալիքը առանձին պահանջներ են, որոնք runner-ին դեռ պետք են։ Ավելացրեք դրանք տեղադրման նպատակակետերի ցանկին՝ նախքան ամբողջական թունել ընտրելը։

Եթե կառավարման ալիքը պետք է անցնի թունելով, դիզայնը պետք է դա ասի գիտակցաբար։ Հետադարձի ժամանակ դա բացահայտելը պլան չէ։ Գրեք երկու ցանկերը՝ ինչին պետք է աշխատանքը հասնի մասնավոր կերպով, և ինչին պետք է runner-ը հասնի ամեն դեպքում։

Այս աշխատանքին ընդհանրապես մասնավոր հասանելիություն պե՞տք է։

Հարցրեք թունելը ավելացնելուց առաջ՝ արդյոք build-ի փուլին դա պետք է։ Մասնավոր տեղադրման գործակալը կարող է բերել հաստատված արտեֆակտ և կատարել տեղադրումը, ինչը ընդհանուր build-ի փուլը պահում է մասնավոր ցանցից դուրս։ Այդ բաժանումը սովորաբար ավելի էժան է, քան build-ի յուրաքանչյուր քայլին թունելով երթուղավորում սովորեցնելը։

Սահմանն ընտրեք աշխատանքային հոսքից, ոչ սովորությունից։ Եթե պատասխանը ոչ է, այս էջի մնացած մասն ավելորդ է, և դա ամենալավ հասանելի արդյունքն է։

Այն վիճակը, որը ժառանգում է հաջորդ աշխատանքը

Նկարագրեք, թե ինչ պետք է ճիշտ լինի աշխատանքից առաջ, մասնավոր հասանելիության ընթացքում և ավարտից հետո՝ ներառյալ չեղարկումը։ Վերջնական վիճակն է, որ ամենահաճախ մնում է չասված, և հենց այն է ժառանգում հաջորդ աշխատանքը։ Գրեք այն pipeline-ի կողքին՝ ի փոխարեն ինչ-որ մեկի հիշողության մեջ թողնելու։

MomentWhat proves itWhat leaks if it is skipped
Job start: pre-flight route checkThe route table shows no tunnel from an earlier job, and the profile list is emptyA stale route sends deployment traffic into a dead tunnel
Job end: disconnect and shredThe profile is down and the temporary key file is goneThe next job inherits an open tunnel and a usable credential
Cancelled job: reboot or disposalThe host is replaced or rebooted before the next job startsA killed process leaves the tunnel up with no owner

Նվիրված կամ մեկանգամյա գործակալը հեշտացնում է այդ սահմանների պարտադրումը։ Կոնտեյները կամ անվանատարածքը օգնում է միայն այն դեպքում, երբ նրա ցանցային և արտոնությունների դասավորությունը իսկապես մեկուսացնում է փոփոխությունը։

Կանգնեցրեք կապը, ոչ ծրագիրը

Օգտագործեք pipeline-ի ավարտման ուղին՝ փակելու այն կապը, որը սկսել է այս աշխատանքը, և հեռացնելու նրա ժամանակավոր հավատարմագրերը։ Մի համադրեք գործընթացները ծրագրի անունով այն հոսթում, որն օգտագործում են այլ աշխատանքներ. կանգնեցրեք կոնկրետ կապը։ Ստորև երկու հրամաններն ամբողջ մաքրումն են, և ոչ մեկը կախված չէ գործընթաց գտնելուց։

vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"

Ավարտումը մեկուսացում չէ. մահացող runner-ը պահում է բացած թունելը, և ուժով կանգնեցված գործընթացը ամբողջովին բաց է թողնում բլոկը։ Այդ պատճառով միայն մաքրման հրամանը չի կարող լինել ամբողջ դիզայնը։ Ահա թե ինչպես է այն ձախողվում գործնականում. տեղադրման աշխատանքը չեղարկվում է պատճենման քայլում, ավարտման բլոկը երբեք չի աշխատում, և նույն հոսթի հաջորդ աշխատանքը սկսվում է կենդանի թունելով և երթուղով, որը ցույց է տալիս ցանց, որին այն չի կարող հասնել։ Խափանումը նման է 'DNS'-ի խնդրի հաջորդ build-ում, ժամեր անց այն աշխատանքի ավարտից, որն առաջացրել է այն։

Գրանցեք պրոֆիլի անունը և հավատարմագրի ուղին աշխատանքի ելքում։ Առանց նույնացուցիչի մերկ անջատման հրամանը դժվար է աուդիտ անել հետագայում։ Մատյանների տողն էլ հենց այն է, որ ապացուցում է, որ բլոկը աշխատել է, երբ ավելի ուշ հետաքննությունը դա հարցնում է։

Տվեք աշխատանքին հոսթ, որը ոչ ոք ուրիշ չի օգտագործում

Միանգամյա ենթակառուցվածքը վերացնում է ժառանգության խնդիրը՝ փոխարենը կառավարելու։ Յուրաքանչյուր աշխատանքի համար նոր գործակալը սկսում է առանց երթուղու, առանց պրոֆիլի և առանց ուրիշների հավատարմագրերի, և նրա ոչնչացումը մաքրում է այն, ինչ աշխատանքը թողել է։ Դա ավելի թանկ է յուրաքանչյուր build-ի համար, և դա այն սահմանի ազնիվ գինն է, որը կախված չէ մաքրման կոդից։ Արտադրական ցանցերին դիպչող աշխատանքների համար սա սովորաբար ավելի էժան տարբերակն է, երբ միջադեպերը հաշվվեն։

Այնտեղ, որտեղ ընդհանուր runner-ը պետք է մնա, փորձարկեք ձախողումը և չեղարկումը նույնքան ուշադիր, որքան հաջող պատճենումը։ Թեստը պետք է ցույց տա, թե ինչ կտեսնի հաջորդ աշխատանքը, եթե այս մեկը չեղարկվեր կես ճանապարհին։ Աշխատանքը ավարտված է, երբ ավարտվել են նրա հասանելիությունը և ժամանակավոր վիճակը, ոչ այն ժամանակ, երբ պատճենման հրամանը վերադարձնում է զրո։

Առնչվող հոդվածներ