Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Մոտեցումը IaC (Ենթակառուցվածքը որպես կոդ) բաղկացած է ոչ միայն այն կոդից, որը պահվում է պահեստում, այլև մարդկանցից և գործընթացներից, որոնք շրջապատում են այս կոդը: Հնարավո՞ր է վերաօգտագործել մոտեցումները՝ սկսած ծրագրային ապահովման մշակումից մինչև ենթակառուցվածքների կառավարում և նկարագրություն: Լավ կլինի այս միտքը հիշել հոդվածը կարդալիս:

անգլերեն տարբերակ

Սա իմ ձայնագրությունն է ներկայացումներ մասին DevopsConf 2019-05-28.

Սլայդներ և տեսանյութեր

Ենթակառուցվածքը որպես բաշի պատմություն

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ենթադրենք, դուք գալիս եք նոր նախագծի, և նրանք ձեզ ասում են. «մենք ունենք Ենթակառուցվածքները `որպես ծածկագիր«. Իրականում ստացվում է Ենթակառուցվածքը որպես բաշի պատմություն կամ օրինակ Փաստաթղթեր որպես bash պատմություն. Սա շատ իրական իրավիճակ է, օրինակ, նման դեպք նկարագրել է Դենիս Լիսենկոն իր ելույթում Ինչպես փոխարինել ամբողջ ենթակառուցվածքը և սկսել հանգիստ քնելՆա պատմեց, թե ինչպես են բաշի պատմությունից ստացել նախագծի համար համահունչ ենթակառուցվածք:

Որոշակի ցանկությամբ կարելի է ասել Ենթակառուցվածքը որպես բաշի պատմություն սա նման է կոդը.

  1. վերարտադրելիությունԴուք կարող եք վերցնել bash պատմությունը, այնտեղից գործարկել հրամանները և, ի դեպ, կարող եք ստանալ աշխատանքային կոնֆիգուրացիա որպես արդյունք:
  2. տարբերակումԴուք գիտեք, թե ովքեր են մտել և ինչ են արել, կրկին փաստ չէ, որ դա ձեզ կտանի աշխատանքային կոնֆիգուրացիայի ելքի մոտ:
  3. պատմությունըՊատմությունը, թե ով ինչ է արել: միայն դուք չեք կարողանա օգտագործել այն, եթե կորցնեք սերվերը:

Ինչ անել?

Ենթակառուցվածքները `որպես ծածկագիր

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Նույնիսկ այնպիսի տարօրինակ դեպք, ինչպիսին Ենթակառուցվածքը որպես բաշի պատմություն դուք կարող եք քաշել այն ականջներից Ենթակառուցվածքները `որպես ծածկագիր, բայց երբ մենք ուզում ենք ավելի բարդ բան անել, քան հին լավ LAMP սերվերը, կգանք այն եզրակացության, որ այս կոդը պետք է ինչ-որ կերպ փոփոխել, փոխել, կատարելագործել։ Հաջորդիվ մենք կցանկանայինք դիտարկել միջև եղած զուգահեռները Ենթակառուցվածքները `որպես ծածկագիր և ծրագրային ապահովման մշակում։

ՉՈՐ

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Պահպանման համակարգի զարգացման նախագծում կար ենթախնդիր պարբերաբար կարգավորել SDS-ըՄենք թողարկում ենք նոր թողարկում, այն պետք է ներկայացվի հետագա փորձարկման համար: Առաջադրանքը չափազանց պարզ է.

  • մուտք գործեք այստեղ ssh-ի միջոցով և կատարեք հրամանը:
  • պատճենեք ֆայլը այնտեղ:
  • շտկեք կոնֆիգուրն այստեղ:
  • այնտեղ սկսեք ծառայությունը
  • ...
  • ՇԱՀՈՒՅԹ

Նկարագրված տրամաբանության համար bash-ն ավելի քան բավարար է, հատկապես նախագծի վաղ փուլերում, երբ այն նոր է սկսվում։ Սա վատ չէ, որ բաշ ես օգտագործում, բայց ժամանակի ընթացքում նման բան տեղակայելու հարցումներ են լինում, բայց մի փոքր այլ: Առաջին բանը, որ գալիս է մտքին, դա copy-paste-ն է։ Եվ հիմա մենք արդեն ունենք երկու շատ նման սցենար, որոնք գրեթե նույն բանն են անում: Ժամանակի ընթացքում սցենարների թիվն աճեց, և մենք բախվեցինք այն փաստի հետ, որ կա որոշակի բիզնես տրամաբանություն տեղադրման տեղակայման համար, որը պետք է համաժամանակացվի տարբեր սցենարների միջև, սա բավականին բարդ է:

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Պարզվում է, որ գոյություն ունի այնպիսի պրակտիկա, ինչպիսին է DRY (Do Not Repeat Yourself): Գաղափարը գոյություն ունեցող ծածկագիրը կրկին օգտագործելն է: Պարզ է թվում, բայց մենք անմիջապես չհասանք դրան: Մեր դեպքում դա սովորական գաղափար էր՝ անջատել կոնֆիգուրները սկրիպտներից: Նրանք. բիզնես տրամաբանությունը, թե ինչպես է տեղադրումը տեղակայվում առանձին, կոնֆիգուրացիաներ՝ առանձին:

SOLID CFM-ի համար

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ժամանակի ընթացքում նախագիծը մեծացավ և բնական շարունակություն Անսիբլի ի հայտ գալն էր։ Նրա տեսքի հիմնական պատճառն այն է, որ թիմում փորձաքննություն կա, և այդ բաշը նախատեսված չէ բարդ տրամաբանության համար։ Անսիբլը նույնպես սկսեց բարդ տրամաբանություն պարունակել։ Որպեսզի բարդ տրամաբանությունը չվերածվի քաոսի, կան ծրագրային ապահովման մշակման մեջ կոդի կազմակերպման սկզբունքներ պինդ Նաև, օրինակ, Գրիգորի Պետրովը «Ինչու՞ է ՏՏ մասնագետին պետք անձնական բրենդ» զեկույցում բարձրացրել է այն հարցը, որ անձը նախագծված է այնպես, որ նրա համար ավելի հեշտ լինի աշխատել որոշ սոցիալական սուբյեկտների հետ, ծրագրային ապահովման մշակման մեջ դրանք. առարկաներ են. Եթե ​​համադրենք այս երկու գաղափարները և շարունակենք զարգացնել դրանք, ապա կնկատենք, որ կարող ենք նաև օգտագործել պինդ հետագայում այս տրամաբանության պահպանումն ու փոփոխումը հեշտացնելու համար:

Միասնական պատասխանատվության սկզբունքը

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Յուրաքանչյուր դասարան կատարում է միայն մեկ առաջադրանք:

Կարիք չկա խառնել ծածկագիրը և ստեղծել մոնոլիտ աստվածային սպագետտի հրեշներ: Ենթակառուցվածքը պետք է բաղկացած լինի պարզ աղյուսներից։ Ստացվում է, որ եթե Ansible խաղագիրքը բաժանեք փոքր կտորների, կարդացեք Ansible դերերը, ապա դրանք ավելի հեշտ է պահպանել:

Բաց փակ սկզբունքը

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Բաց/փակ սկզբունք.

  • Բաց ընդարձակման համար. նշանակում է, որ կազմակերպության վարքագիծը կարող է ընդլայնվել՝ ստեղծելով նոր միավորների տեսակներ:
  • Փակ է փոփոխության համար. Կազմակերպության վարքագիծը ընդլայնելու արդյունքում չպետք է փոփոխություններ կատարվեն այդ միավորներն օգտագործող կոդի մեջ:

Սկզբում մենք տեղադրեցինք թեստային ենթակառուցվածքը վիրտուալ մեքենաների վրա, սակայն հաշվի առնելով այն հանգամանքը, որ տեղակայման բիզնես տրամաբանությունը առանձնացված էր իրականացումից, մենք առանց խնդիրների ավելացրինք roll out-ը baremetall-ում:

Լիսկովի փոխարինման սկզբունքը

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Բարբարա Լիսկովի փոխարինման սկզբունքը. Ծրագրի օբյեկտները պետք է փոխարինելի լինեն իրենց ենթատիպերի օրինակներով՝ չփոխելով ծրագրի ճիշտ կատարումը

Եթե ​​ավելի լայն նայեք, ապա դա որևէ կոնկրետ նախագծի առանձնահատկություն չէ, որը կարող է կիրառվել այնտեղ պինդ, ընդհանուր առմամբ խոսքը CFM-ի մասին է, օրինակ՝ մեկ այլ նախագծում անհրաժեշտ է տեղակայել տուփով Java հավելված տարբեր Java-ների, հավելվածների սերվերների, տվյալների բազաների, ՕՀ-ի և այլնի վրա։ Օգտագործելով այս օրինակը, ես կքննարկեմ հետագա սկզբունքները պինդ

Մեր դեպքում, ենթակառուցվածքի թիմի ներսում պայմանավորվածություն կա, որ եթե մենք տեղադրել ենք imbjava կամ oraclejava դերը, ապա ունենք java երկուական գործարկվող: Սա անհրաժեշտ է, քանի որ Վերին հոսքի դերերը կախված են այս վարքագծից, նրանք ակնկալում են java: Միևնույն ժամանակ, սա մեզ թույլ է տալիս փոխարինել Java-ի մեկ ներդրումը/տարբերակը մյուսով` առանց հավելվածի տեղակայման տրամաբանությունը փոխելու:

Խնդիրն այստեղ կայանում է նրանում, որ Ansible-ում դա անհնար է իրականացնել, ինչի արդյունքում թիմի ներսում որոշ պայմանավորվածություններ են հայտնվում։

Ինտերֆեյսի տարանջատման սկզբունքը

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ինտերֆեյսի բաժանման սկզբունքը. «Շատ հաճախորդի հատուկ ինտերֆեյսներ ավելի լավն են, քան մեկ ընդհանուր նշանակության ինտերֆեյսը:

Սկզբում մենք փորձեցինք հավելվածի տեղակայման ողջ փոփոխականությունը տեղադրել մեկ Ansible գրքի մեջ, բայց դժվար էր աջակցել, և այն մոտեցումը, երբ մենք ունենք արտաքին ինտերֆեյս, նշված է (հաճախորդը ակնկալում է պորտ 443), ապա ենթակառուցվածքը կարող է հավաքվել անհատից: աղյուսներ կոնկրետ իրականացման համար:

Կախվածության ինվերսիայի սկզբունքը

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Կախվածության ինվերսիայի սկզբունքը. Ավելի բարձր մակարդակների մոդուլները չպետք է կախված լինեն ավելի ցածր մակարդակների մոդուլներից: Երկու տեսակի մոդուլները պետք է կախված լինեն աբստրակցիաներից: Աբստրակցիաները չպետք է կախված լինեն մանրամասներից: Մանրամասները պետք է կախված լինեն աբստրակցիաներից:

Այստեղ օրինակը հիմնված կլինի հակապատկերի վրա:

  1. Հաճախորդներից մեկը մասնավոր ամպ ուներ:
  2. Մենք պատվիրեցինք վիրտուալ մեքենաներ ամպի ներսում:
  3. Բայց ամպի բնույթի պատճառով հավելվածի տեղակայումը կապված էր այն հիպերվիզորի հետ, որի վրա էր VM-ը:

Նրանք. Բարձր մակարդակի հավելվածների տեղակայման տրամաբանությունը կախվածություններով հոսում էր դեպի հիպերվիզորի ավելի ցածր մակարդակներ, և դա նշանակում էր խնդիրներ այս տրամաբանությունը նորից օգտագործելիս: Մի արեք դա այսպես.

Փոխազդեցություն

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ենթակառուցվածքը որպես ծածկագիր ոչ միայն ծածկագրի, այլ նաև կոդի և մարդկանց միջև փոխհարաբերությունների, ենթակառուցվածքի մշակողների միջև փոխգործակցության մասին է:

Ավտոբուսի գործոն

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ենթադրենք, որ ձեր նախագծում ունեք Վասյա: Վասյան ամեն ինչ գիտի ձեր ենթակառուցվածքի մասին, ի՞նչ կլինի, եթե Վասյան հանկարծ անհետանա։ Սա շատ իրական իրավիճակ է, քանի որ նրան կարող էր ավտոբուս հարվածել։ Երբեմն դա տեղի է ունենում. Եթե ​​դա տեղի ունենա, և կոդի, կառուցվածքի, դրա աշխատանքի, արտաքին տեսքի և գաղտնաբառերի մասին գիտելիքները չտարածվեն թիմում, ապա դուք կարող եք հանդիպել մի շարք տհաճ իրավիճակների: Այս ռիսկերը նվազագույնի հասցնելու և թիմում գիտելիքները բաշխելու համար կարող եք օգտագործել տարբեր մոտեցումներ

Զույգ մշակում

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Դա նման չէ որպես կատակ, որ ադմինները գարեջուր են խմել, փոխել գաղտնաբառերը և զույգ ծրագրավորման անալոգը։ Նրանք. երկու ինժեներ նստում են մեկ համակարգչի, մեկ ստեղնաշարի մոտ և սկսում են միասին կարգավորել ձեր ենթակառուցվածքը՝ տեղադրել սերվեր, գրել Ansible դեր և այլն: Հաճելի է հնչում, բայց մեզ մոտ չստացվեց: Բայց այս պրակտիկայի հատուկ դեպքերն աշխատեցին։ Գալիս է նոր աշխատակից, նրա մենթորը իր հետ միասին իրական գործ է ստանձնում, աշխատում ու փոխանցում գիտելիք։

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

Կոդի ակնարկ

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Սուբյեկտիվորեն ավելի արդյունավետ էր ենթակառուցվածքի մասին գիտելիքների տարածումը և այն, թե ինչպես է այն աշխատում՝ օգտագործելով կոդերի վերանայումը.

  • Ենթակառուցվածքը նկարագրված է պահեստում առկա ծածկագրով:
  • Փոփոխությունները տեղի են ունենում առանձին մասնաճյուղում:
  • Միաձուլման հարցման ժամանակ դուք կարող եք տեսնել ենթակառուցվածքի փոփոխությունների դելտան:

Այստեղ ամենակարևորն այն էր, որ գրախոսները մեկ առ մեկ ընտրվում էին ըստ ժամանակացույցի, այսինքն. որոշ աստիճանի հավանականությամբ դուք կբարձրանաք նոր ենթակառուցվածքի մեջ:

կոդի ոճը

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ժամանակի ընթացքում վերանայումների ժամանակ սկսեցին վիճաբանություններ առաջանալ, քանի որ... Գրախոսներն ունեին իրենց ոճը, և գրախոսների հերթափոխը դրանք դասավորեց տարբեր ոճերով՝ 2 բացատ կամ 4, camelCase կամ snake_case: Սա միանգամից հնարավոր չեղավ իրականացնել։

  • Առաջին գաղափարն այն էր, որ խորհուրդ տվեցին օգտագործել լինտեր, ի վերջո, բոլորը ինժեներ են, բոլորը խելացի են: Բայց տարբեր խմբագրիչներ, ՕՀ, հարմար չեն
  • Սա վերածվեց բոտի, որը գրում էր թուլացման համար յուրաքանչյուր խնդրահարույց կատարման համար և կցում էր ալիքի ելքը: Բայց շատ դեպքերում կային ավելի կարևոր անելիքներ, և կոդը մնաց չֆիքսված:

Կանաչ շինարարության վարպետ

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ժամանակն անցնում է, և մենք եկել ենք այն եզրակացության, որ այն պարտավորությունները, որոնք չեն անցնում որոշակի թեստեր, չեն կարող թույլ տալ վարպետին: Voila! Մենք հայտնագործեցինք Green Build Master-ը, որը երկար ժամանակ կիրառվում էր ծրագրային ապահովման մշակման մեջ.

  • Զարգացումը կատարվում է առանձին մասնաճյուղում։
  • Այս թեմայում թեստեր են ընթանում:
  • Եթե ​​թեստերը ձախողվեն, կոդը այն չի վերածվի վարպետի:

Այս որոշումը կայացնելը շատ ցավալի էր, քանի որ... շատ հակասություններ առաջացրեց, բայց արժեր, քանի որ... Վերանայումները սկսեցին միաձուլման հարցումներ ստանալ՝ առանց ոճային տարբերությունների, և ժամանակի ընթացքում խնդրահարույց տարածքների թիվը սկսեց նվազել:

IaC թեստավորում

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Բացի ոճի ստուգումից, դուք կարող եք օգտագործել այլ բաներ, օրինակ՝ ստուգելու համար, որ ձեր ենթակառուցվածքն իրականում կարող է տեղակայվել: Կամ ստուգեք, որ ենթակառուցվածքների փոփոխությունները չեն հանգեցնի փողի կորստի։ Ինչու՞ սա կարող է անհրաժեշտ լինել: Հարցը բարդ է և փիլիսոփայական, ավելի լավ է պատասխանել մի պատմությամբ, որ ինչ-որ կերպ Powershell-ում եղել է ավտոմատ սանդղակ, որը չի ստուգել սահմանային պայմանները => ստեղծվել են ավելի շատ VM, քան անհրաժեշտ էր => հաճախորդը ծախսել է ավելի շատ գումար, քան նախատեսված էր: Սա այնքան էլ հաճելի չէ, բայց միանգամայն հնարավոր կլիներ այս սխալը հայտնաբերել ավելի վաղ փուլերում:

Կարելի է հարցնել՝ ինչո՞ւ բարդ ենթակառուցվածքներն էլ ավելի բարդացնել։ Ենթակառուցվածքի թեստերը, ինչպես կոդի համար, չեն վերաբերում պարզեցմանը, այլ այն մասին, թե ինչպես պետք է աշխատի ձեր ենթակառուցվածքը:

IaC փորձարկման բուրգ

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

IaC թեստավորում. ստատիկ վերլուծություն

Եթե ​​դուք միանգամից տեղակայեք ամբողջ ենթակառուցվածքը և ստուգեք, որ այն աշխատում է, կարող եք պարզել, որ դա շատ ժամանակ է պահանջում և շատ ժամանակ է պահանջում: Հետեւաբար, հիմքը պետք է լինի մի բան, որն արագ աշխատի, այն շատ է, և այն ծածկում է շատ պարզունակ վայրեր:

Բաշը բարդ է

Դիտարկենք մի չնչին օրինակ. ընտրեք բոլոր ֆայլերը ընթացիկ գրացուցակում և պատճենեք մեկ այլ վայրում: Առաջին բանը, որ գալիս է մտքին.

for i in * ; do 
    cp $i /some/path/$i.bak
done

Իսկ եթե ֆայլի անվան մեջ բացատ լինի: Դե, լավ, մենք խելացի ենք, մենք գիտենք, թե ինչպես օգտագործել չակերտները.

for i in * ; do cp "$i" "/some/path/$i.bak" ; done

Լավ արեցի՞ք: Ո՛չ։ Ինչ անել, եթե գրացուցակում ոչինչ չկա, այսինքն. գլոբբինգը չի աշխատի:

find . -type f -exec mv -v {} dst/{}.bak ;

Լավ արեցի՞ք հիմա: Ոչ... Մոռացել եք, թե ինչ կարող է լինել ֆայլի անվան մեջ n.

touch x
mv x  "$(printf "foonbar")"
find . -type f -print0 | xargs -0 mv -t /path/to/target-dir

Ստատիկ վերլուծության գործիքներ

Նախորդ քայլի խնդիրը կարելի էր բացահայտել, երբ մոռանում էինք մեջբերումները, դրա համար բնության մեջ կան բազմաթիվ միջոցներ Shellcheck, ընդհանուր առմամբ, դրանք շատ են, և, ամենայն հավանականությամբ, դուք կարող եք ձեր IDE-ի տակ գլանափաթեթ գտնել:

Լեզու
Գործիք

ուժեղ հարվածել
Shellcheck

սուտակ
RuboCop

Python
Հենակետ

ածելի
Անսիբլ Լինտ

IaC թեստավորում. միավորի թեստեր

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ինչպես տեսանք նախորդ օրինակից, լինտերները ամենազոր չեն և չեն կարող մատնանշել բոլոր խնդրահարույց ոլորտները: Ավելին, ծրագրային ապահովման մշակման փորձարկման հետ անալոգիայով մենք կարող ենք հիշել միավորի թեստերը: Այն, ինչ անմիջապես գալիս է մտքին, այն է շունիտ, հունական, սպեկտր, ամենախայտառակ. Բայց ի՞նչ անել ansible-ի, շեֆ-խոհարարի, saltstack-ի և նրանց նմանների հետ:

Հենց սկզբում խոսեցինք պինդ և որ մեր ենթակառուցվածքը պետք է բաղկացած լինի փոքր աղյուսներից: Նրանց ժամանակը եկել է։

  1. Ենթակառուցվածքը բաժանված է փոքր աղյուսների, օրինակ՝ Ansible դերերի։
  2. Գործարկված է ինչ-որ միջավայր, լինի դա դոկեր, թե VM:
  3. Մենք կիրառում ենք մեր Ansible դերը այս թեստային միջավայրում:
  4. Մենք ստուգում ենք, որ ամեն ինչ աշխատեց այնպես, ինչպես մենք ակնկալում էինք (մենք փորձարկում ենք):
  5. Մենք որոշում ենք լավ, թե ոչ լավ:

IaC թեստավորում. միավորի փորձարկման գործիքներ

Հարց, որո՞նք են թեստերը CFM-ի համար: Դուք կարող եք պարզապես գործարկել սցենարը, կամ կարող եք օգտագործել պատրաստի լուծումներ դրա համար.

CFM
Գործիք

Հղիություն
Թեստինֆրա

Chef
Ստուգել

Chef
Serverspec

աղի դիզել
Goss

Օրինակ testinfra-ի համար՝ ստուգելով, որ օգտվողները test1, test2 գոյություն ունեն և գտնվում են խմբում sshusers:

def test_default_users(host):
    users = ['test1', 'test2' ]
    for login in users:
        assert host.user(login).exists
        assert 'sshusers' in host.user(login).groups

Ի՞նչ ընտրել: Հարցը բարդ է և երկիմաստ, ահա 2018-2019 թվականների համար github-ի նախագծերի փոփոխությունների օրինակ.

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

IaC փորձարկման շրջանակներ

Հարց է առաջանում՝ ինչպե՞ս հավաքել այդ ամենը և գործարկել։ Կարող է վերցրեք այն և ինքներդ արեք դա եթե կան բավարար թվով ինժեներներ. Կամ կարող եք վերցնել պատրաստի լուծումներ, չնայած դրանցից շատերը չկան.

CFM
Գործիք

Հղիություն
Մոլեկուլ

Chef
Փորձնական խոհանոց

Terraform
Հողատարածք

Github-ում 2018-2019 թվականների նախագծերի փոփոխությունների օրինակ.

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Մոլեկուլ ընդդեմ. Փորձարկման խոհանոց

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Սկզբում մենք փորձել է օգտագործել փորձնական խոհանոց:

  1. Զուգահեռաբար ստեղծեք VM:
  2. Կիրառել Ansible դերերը:
  3. Գործարկել ստուգումը:

25-35 դերերի համար այն աշխատել է 40-70 րոպե, որը երկար էր։

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Հաջորդ քայլը jenkins/docker/ansible/մոլեկուլի անցումն էր: Իդիոլոգիապես ամեն ինչ նույնն է

  1. Լինտ խաղային գրքեր.
  2. Հերթագրեք դերերը.
  3. Գործարկման կոնտեյներ
  4. Կիրառել Ansible դերերը:
  5. Գործարկել testinfra-ն:
  6. Ստուգեք անզորությունը.

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

40 դերերի համար լինզինգը և մեկ տասնյակի համար թեստերը սկսեցին տևել մոտ 15 րոպե:

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ինչ ընտրել, կախված է բազմաթիվ գործոններից, ինչպիսիք են օգտագործվող կույտը, թիմի փորձը և այլն: այստեղ յուրաքանչյուրն ինքն է որոշում, թե ինչպես փակել Unit թեստավորման հարցը

IaC թեստավորում. Ինտեգրման թեստեր

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ենթակառուցվածքի փորձարկման բուրգի հաջորդ քայլը լինելու են ինտեգրացիոն թեստերը: Դրանք նման են միավորի թեստերին.

  1. Ենթակառուցվածքը բաժանված է փոքր աղյուսների, օրինակ՝ Ansible դերերի։
  2. Գործարկված է ինչ-որ միջավայր, լինի դա դոկեր, թե VM:
  3. Այս թեստային միջավայրի համար դիմեք շատ Հասանելի դերեր.
  4. Մենք ստուգում ենք, որ ամեն ինչ աշխատեց այնպես, ինչպես մենք ակնկալում էինք (մենք փորձարկում ենք):
  5. Մենք որոշում ենք լավ, թե ոչ լավ:

Կոպիտ ասած, մենք չենք ստուգում համակարգի առանձին տարրի աշխատանքը, ինչպես միավորի թեստերում, մենք ստուգում ենք, թե ինչպես է սերվերը կազմաձևված որպես ամբողջություն:

IaC թեստավորում. վերջից մինչև վերջ թեստեր

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Բուրգի գագաթին մեզ դիմավորում են End to End թեստերը: Նրանք. Մենք չենք ստուգում առանձին սերվերի, առանձին սկրիպտի կամ մեր ենթակառուցվածքի առանձին աղյուսի աշխատանքը: Մենք ստուգում ենք, որ շատ սերվերներ միացված են միասին, մեր ենթակառուցվածքն աշխատում է այնպես, ինչպես մենք ակնկալում ենք: Ցավոք, ես երբեք չեմ տեսել պատրաստի տուփով լուծումներ, հավանաբար այն պատճառով, որ... Ենթակառուցվածքը հաճախ եզակի է և դժվար է ձևավորել և ստեղծել փորձարկման շրջանակ: Արդյունքում յուրաքանչյուրն իր լուծումներն է ստեղծում։ Պահանջ կա, բայց պատասխան չկա. Հետևաբար, ես ձեզ կասեմ, թե ինչ կա, որպեսզի ուրիշներին մղեմ առողջ մտքերի կամ քիթս քսեմ այն ​​բանի համար, որ ամեն ինչ հորինված է մեզանից առաջ:

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Հարուստ պատմություն ունեցող նախագիծ. Այն օգտագործվում է խոշոր կազմակերպություններում, և հավանաբար ձեզանից յուրաքանչյուրն անուղղակիորեն խաչվել է դրա հետ: Հավելվածն աջակցում է բազմաթիվ տվյալների բազաների, ինտեգրումների և այլնի: Իմանալով, թե ինչպիսին կարող է լինել ենթակառուցվածքը, դա շատ docker-compose ֆայլեր են, և իմանալ, թե որ թեստերը որ միջավայրում պետք է գործարկել Jenkins-ը:

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Այս սխեման գործել է բավականին երկար, մինչև շրջանակում հետազոտություն մենք չենք փորձել սա փոխանցել Openshift-ին: Կոնտեյներները մնում են նույնը, բայց գործարկման միջավայրը փոխվել է (բարև DRY կրկին):

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Հետազոտության գաղափարն ավելի հեռուն գնաց, և openshift-ում նրանք գտան այնպիսի բան, ինչպիսին է APB (Ansible Playbook Bundle), որը թույլ է տալիս հավաքել գիտելիքները, թե ինչպես կարելի է ենթակառուցվածքը տեղակայել կոնտեյների մեջ: Նրանք. կա ենթակառուցվածքը տեղակայելու վերաբերյալ գիտելիքների կրկնվող, փորձարկվող կետ:

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Այս ամենը լավ էր հնչում, մինչև որ մենք հանդիպեցինք տարասեռ ենթակառուցվածքի. մեզ Windows-ը պետք էր թեստերի համար: Արդյունքում՝ ինչ, որտեղ, ինչպես տեղակայել և փորձարկել գիտելիքը ջենկիններում է:

Եզրափակում

Ինչ ես սովորեցի 200 տող ենթակառուցվածքային ծածկագրի փորձարկումից

Ենթակառուցվածքը, ինչպես կոդն է

  • Կոդը պահեստում:
  • Մարդկային փոխազդեցություն.
  • Ենթակառուցվածքի փորձարկում.

հղումներ

Source: www.habr.com

Добавить комментарий