Dummies ուղեցույց. DevOps շղթաների կառուցում բաց կոդով գործիքներով
Ստեղծեք ձեր առաջին DevOps շղթան հինգ քայլով սկսնակների համար:
DevOps-ը դարձել է դեղամիջոց չափազանց դանդաղ, անջատված և այլ կերպ խնդրահարույց զարգացման գործընթացների համար: Բայց DevOps-ում ձեզ անհրաժեշտ է նվազագույն գիտելիքներ: Այն կներառի այնպիսի հասկացություններ, ինչպիսիք են DevOps շղթան և ինչպես ստեղծել հինգ քայլից մեկը: Սա ամբողջական ուղեցույց չէ, այլ միայն «ձուկ», որը կարելի է ընդլայնել: Սկսենք պատմությունից։
Իմ ծանոթությունը DevOps-ին
Ես նախկինում աշխատում էի ամպերի հետ Citi Group-ում և մշակում IaaS վեբ հավելված՝ կառավարելու Citi-ի ամպային ենթակառուցվածքը, բայց ինձ միշտ հետաքրքրել է, թե ինչպես օպտիմալացնել զարգացման շղթան և բարելավել մշակույթը մշակողների շրջանում: Գրեգ Լավանդերը՝ Ամպային ճարտարապետության և ենթակառուցվածքների մեր CTO-ն, խորհուրդ տվեց ինձ այս գիրքը: «Փյունիկ» նախագիծ. Այն գեղեցիկ է բացատրում DevOps-ի սկզբունքները և կարդում է վեպի պես:
Հետևի աղյուսակը ցույց է տալիս, թե որքան հաճախ են ընկերությունները թողարկում նոր տարբերակներ.
Ինչպե՞ս են Amazon-ին, Google-ին և Netflix-ին հաջողվում այդքան շատ տարածել: Եվ դա պարզ է՝ նրանք հասկացան, թե ինչպես ստեղծել գրեթե կատարյալ DevOps շղթա:
Citi-ում մեզ համար ամեն ինչ շատ տարբեր էր, մինչև մենք անցանք DevOps-ին: Այնուհետև իմ թիմն ուներ տարբեր միջավայրեր, բայց մենք մշակման սերվերին առաքումը կատարեցինք ձեռքով: Բոլոր ծրագրավորողներն ուներ մուտք գործելու միայն մեկ սերվեր, որը հիմնված է IBM WebSphere Application Server Community Edition-ի վրա: Առաքման միաժամանակյա փորձով սերվերը «ընկավ», և ամեն անգամ մենք ստիպված էինք «ցավով» բանակցել մեր միջև։ Մենք նաև ունեինք կոդի անբավարար ծածկույթ թեստերով, ձեռքով առաքման ժամանակատար գործընթաց, և որևէ առաջադրանքի կամ հաճախորդի պահանջի օգնությամբ կոդի առաքմանը հետևելու հնարավորություն չկար:
Պարզ էր, որ շտապ ինչ-որ բան պետք է անել, և ես գտա համախոհ գործընկերոջ։ Մենք որոշեցինք միասին ստեղծել առաջին DevOps շղթան. նա ստեղծեց վիրտուալ մեքենա և Tomcat հավելվածի սերվեր, իսկ ես հոգ տարա Ջենքինսի մասին, Atlassian Jira-ի և BitBucket-ի հետ ինտեգրումը, ինչպես նաև կոդերի ծածկույթը թեստերով: Նախագիծը հաջողված էր. մենք լիովին ավտոմատացրեցինք զարգացման շղթան, հասանք զարգացման սերվերի գրեթե 100% գործարկման, կարողացանք վերահսկել և բարելավել կոդերի ծածկույթը թեստերով, և Git մասնաճյուղը կարող էր կապված լինել Jira-ի առաքման և խնդրի հետ: Եվ գրեթե բոլոր գործիքները, որոնք մենք օգտագործել ենք DevOps շղթան կառուցելու համար, բաց կոդով էին:
Իրականում, շղթան պարզեցված էր, քանի որ մենք նույնիսկ չենք կիրառել առաջադեմ կոնֆիգուրացիաներ՝ օգտագործելով Jenkins-ը կամ Ansible-ը: Բայց մեզ հաջողվեց։ Թերեւս սա սկզբունքի հետեւանք է Պարետո (80/20 կանոնը):
DevOps-ի և CI/CD շղթայի համառոտ նկարագրությունը
DevOps-ն ունի տարբեր սահմանումներ: DevOps-ը, ինչպես Agile-ը, ներառում է տարբեր առարկաներ: Բայց շատերը կհամաձայնեն հետևյալ սահմանման հետ. DevOps-ը ծրագրային ապահովման մշակման մեթոդ կամ կյանքի ցիկլ է, որի հիմնական սկզբունքը մշակույթ ստեղծելն է, որտեղ մշակողները և այլ աշխատակիցները «միևնույն ալիքի երկարության վրա» են, ձեռքի աշխատանքը ավտոմատացված է, բոլորն անում են այն, ինչում լավագույնս են, մեծանում է առաքումների հաճախականությունը, բարձրանում է աշխատանքի արտադրողականությունը, մեծանում է ճկունությունը։
Թեև միայն գործիքները բավարար չեն DevOps միջավայր ստեղծելու համար, դրանք անփոխարինելի են: Դրանցից ամենակարևորը շարունակական ինտեգրումն է և շարունակական առաքումը (CI/CD): Յուրաքանչյուր միջավայրի համար շղթայում կան տարբեր փուլեր (օրինակ՝ DEV (մշակում), INT (ինտեգրում), TST (փորձարկում), QA (որակի ապահովում), UAT (օգտագործողի ընդունման փորձարկում), STG (պատրաստում), PROD (օգտագործում)) , ձեռքով առաջադրանքները ավտոմատացված են, մշակողները կարող են արտադրել որակյալ կոդ, մատուցել այն և հեշտությամբ վերակառուցել:
Այս նշումը նկարագրում է, թե ինչպես կարելի է ստեղծել DevOps շղթա հինգ քայլով, ինչպես ցույց է տրված ստորև նկարում, օգտագործելով բաց կոդով գործիքներ:
Եկեք գործի անցնենք:
Քայլ 1. CI/CD հարթակ
Առաջին հերթին ձեզ հարկավոր է CI/CD գործիք: Jenkins-ը MIT-ի արտոնագրված, բաց կոդով CI/CD գործիք է, որը գրված է Java-ով, որը հանրահռչակեց DevOps շարժումը և դարձավ CICD-ի դե ֆակտո ստանդարտ:
Ինչ է Ջենկինսը: Պատկերացրեք, որ դուք ունեք կախարդական կառավարման վահանակ տարբեր ծառայությունների և գործիքների համար: Ինքնուրույն, Ջենկինսի նման CI/CD գործիքն անօգուտ է, բայց տարբեր գործիքների և ծառայությունների շնորհիվ այն դառնում է ամենակարող:
Բացի Ջենկինսից, կան բազմաթիվ այլ բաց կոդով գործիքներ, ընտրեք ցանկացածը:
Ահա թե ինչ տեսք ունի DevOps գործընթացը CI/CD գործիքի միջոցով
Դուք ունեք CI / CD գործիք localhost-ում, բայց դեռ շատ բան չկա անելու: Անցնենք հաջորդ քայլին։
Քայլ 2. Տարբերակի վերահսկում
CI/CD գործիքի կախարդանքը ստուգելու լավագույն (և, հավանաբար, ամենահեշտ) միջոցը այն ինտեգրելն է աղբյուրի կառավարման (SCM) գործիքի հետ: Ինչու՞ է ձեզ անհրաժեշտ տարբերակի վերահսկում: Ենթադրենք, դուք դիմում եք ներկայացնում: Դուք այն գրում եք Java, Python, C++, Go, Ruby, JavaScript կամ որևէ այլ լեզվով, որը վագոն է և փոքրիկ սայլակ: Այն, ինչ գրում ես, կոչվում է սկզբնաղբյուր: Սկզբում, հատկապես եթե միայնակ եք աշխատում, կարող եք ամեն ինչ պահել տեղական գրացուցակում: Բայց քանի որ նախագիծը մեծանում է, և ավելի շատ մարդիկ են միանում, ձեզ հարկավոր է տարբերակ՝ կիսվելու կոդի փոփոխություններով, բայց փոփոխությունները միաձուլելիս խուսափել կոնֆլիկտներից: Եվ դուք նաև պետք է ինչ-որ կերպ վերականգնել նախորդ տարբերակները՝ առանց կրկնօրինակներ օգտագործելու և կոդային ֆայլերի համար պատճենահանման տեղադրման մեթոդի օգտագործման:
Եվ այստեղ առանց SCM-ի ոչ մի տեղ: SCM-ը պահում է կոդը պահեստներում, կառավարում է դրա տարբերակները և համակարգում այն մշակողների միջև:
Կան բազմաթիվ SCM գործիքներ, բայց Git-ը արժանիորեն դարձել է դե ֆակտո ստանդարտ: Խորհուրդ եմ տալիս օգտագործել այն, բայց կան այլ տարբերակներ։
Ահա թե ինչ տեսք ունի DevOps խողովակաշարը SCM-ն ավելացնելուց հետո:
CI/CD գործիքը կարող է ավտոմատացնել սկզբնական կոդի վերբեռնումը և ներբեռնումը և թիմային համագործակցությունը: Վատ չի? Բայց հիմա ինչպե՞ս կարելի է դրանից միլիարդավոր օգտատերերի կողմից սիրված աշխատող հավելված պատրաստել:
Քայլ 3. Ստեղծեք ավտոմատացման գործիք
Ամեն ինչ ճիշտ է ընթանում։ Դուք կարող եք վերբեռնել կոդը և փոփոխություններ կատարել աղբյուրի կառավարման մեջ և հրավիրել ընկերներին աշխատել ձեզ հետ: Բայց դուք դեռ հավելված չունեք: Որպեսզի սա լինի վեբ հավելված, այն պետք է կազմվի և փաթեթավորվի բաշխման համար կամ գործարկվի որպես գործարկվող: (Այնպիսի մեկնաբանված ծրագրավորման լեզուն, ինչպիսին է JavaScript-ը կամ PHP-ն, կազմման կարիք չունի:)
Օգտագործեք կառուցման ավտոմատացման գործիք: Որ գործիքն էլ որ ընտրեք, այն կհավաքի կոդը ճիշտ ձևաչափով և կավտոմատացնի մաքրումը, հավաքումը, փորձարկումը և առաքումը: Կառուցման գործիքները տարբերվում են ըստ լեզվի, սակայն սովորաբար օգտագործվում են հետևյալ բաց կոդով տարբերակները:
Կատարյալ! Այժմ եկեք տեղադրենք կառուցման ավտոմատացման գործիքի կազմաձևման ֆայլերը աղբյուրի կառավարման մեջ, որպեսզի CI/CD գործիքը կառուցի դրանք:
Դա լավ է զգում: Բայց որտե՞ղ է այս ամենը դուրս գալու հիմա:
Քայլ 4. Վեբ հավելվածի սերվեր
Այսպիսով, դուք ունեք փաթեթավորված ֆայլ, որը կարող է գործարկվել կամ տարածվել: Որպեսզի հավելվածն իսկապես օգտակար լինի, այն պետք է ունենա ինչ-որ ծառայություն կամ ինտերֆեյս, բայց դուք պետք է այդ ամենը տեղադրեք ինչ-որ տեղ:
Վեբ հավելվածը կարող է տեղակայվել վեբ հավելվածի սերվերի վրա: Հավելվածի սերվերն ապահովում է միջավայր, որտեղ դուք կարող եք կատարել փաթեթավորված տրամաբանություն, ինտերֆեյսներ մատուցել և վեբ ծառայությունները ցուցադրել վարդակից: Ծրագրի սերվերը տեղադրելու համար ձեզ հարկավոր է HTTP սերվեր և մի քանի այլ միջավայրեր (օրինակ՝ վիրտուալ մեքենա): Առայժմ, եկեք ձևացնենք, որ դուք գործ ունեք այս ամենի հետ, երբ գնում եք (թեև ես կխոսեմ բեռնարկղերի մասին ստորև):
Կան մի քանի բաց վեբ հավելվածների սերվերներ:
Մենք արդեն ունենք գրեթե աշխատող DevOps շղթա: Մեծ աշխատանք!
Սկզբունքորեն, դուք կարող եք կանգ առնել այստեղ, այնուհետև կարող եք ինքներդ կարգավորել այն, բայց արժե խոսել կոդի որակի մասին:
Քայլ 5. Փորձարկման ծածկույթ
Փորձարկումը շատ ժամանակ և ջանք է պահանջում, բայց ավելի լավ է անմիջապես գտնել սխալներ և բարելավել կոդը՝ վերջնական օգտատերերին գոհացնելու համար: Այդ նպատակով կան բազմաթիվ բաց գործիքներ, որոնք ոչ միայն կփորձարկեն կոդը, այլեւ խորհուրդ կտան այն բարելավելու մասին: CI/CD գործիքների մեծ մասը կարող է միացնել այս գործիքներին և ավտոմատացնել գործընթացը:
Թեստավորումը բաժանված է երկու մասի՝ թեստեր գրելու և կատարելու համար թեստավորման շրջանակներ և կոդի որակը բարելավելու ակնարկներով գործիքներ:
Փորձարկման շրջանակներ
Գործիքներ որակյալ խորհուրդներով
Այս գործիքների և շրջանակների մեծ մասը գրված է Java-ի, Python-ի և JavaScript-ի համար, քանի որ C++-ը և C#-ը սեփականություն են (չնայած GCC-ն բաց կոդ է):
Մենք կիրառել ենք թեստային ծածկույթի գործիքները, և այժմ DevOps խողովակաշարը պետք է նման լինի դասընթացի սկզբի նկարին:
Լրացուցիչ քայլեր
Բեռնարկղեր
Ինչպես նախկինում ասացի, հավելվածի սերվերը կարող է տեղակայվել վիրտուալ մեքենայի կամ սերվերի մեջ, սակայն կոնտեյներներն ավելի տարածված են:
Ինչ են բեռնարկղերը? Մի խոսքով, վիրտուալ մեքենայում օպերացիոն համակարգը հաճախ ավելի շատ տեղ է զբաղեցնում, քան հավելվածը, և կոնտեյները սովորաբար բավական է մի քանի գրադարաններով և կոնֆիգուրացիայով: Որոշ դեպքերում վիրտուալ մեքենաներն անփոխարինելի են, բայց կոնտեյները կարող է տեղավորել հավելվածը սերվերի հետ միասին՝ առանց հավելյալ ծախսերի:
Կոնտեյներների համար սովորաբար վերցվում են Docker-ը և Kubernetes-ը, չնայած կան այլ տարբերակներ:
Կարդացեք հոդվածներ Docker-ի և Kubernetes-ի մասին այստեղ Opensource.com- ը:
Մեր DevOps ցանցը կենտրոնացած է համատեղ ստեղծման և հավելվածի առաքման վրա, սակայն կան այլ հետաքրքիր բաներ, որոնք դուք կարող եք անել DevOps գործիքների միջոցով: Օրինակ, օգտագործեք Ենթակառուցվածքը որպես կոդ (IaC) գործիքներ, որոնք նաև հայտնի են որպես միջին ծրագրերի ավտոմատացման գործիքներ: Այս գործիքներն օգնում են ավտոմատացնել տեղադրումը, կառավարումը և միջին ծրագրերի այլ առաջադրանքները: Օրինակ, ավտոմատացման գործիքը կարող է ընդունել հավելվածները (վեբ հավելվածի սերվեր, տվյալների բազա, մոնիտորինգի գործիքներ) ճիշտ կոնֆիգուրացիաներով և մղել դրանք դեպի հավելվածի սերվեր:
Ահա մի քանի տարբերակ բաց միջին ծրագրային ավտոմատացման գործիքների համար.
Սա միայն այսբերգի գագաթն է: DevOps շղթան կարող է շատ ավելին անել: Սկսեք CI/CD գործիքից և տեսեք, թե էլ ինչ կարող եք ավտոմատացնել՝ ձեր աշխատանքը հեշտացնելու համար: Մի մոռացեք մասին բաց հաղորդակցման գործիքներ արդյունավետ համագործակցության համար:
Ահա ևս մի քանի լավ DevOps հոդվածներ սկսնակների համար.