Middle
Ի՞նչ է տեղի ունենում, երբ GitLab-ը ներբեռնում է կոդը։
sobes.tech AI
Պատասխան AI-ից
Երբ GitLab-ը ներբեռնում է ռեպոզիտորիքի կոդը աշխատանքային գրացուցակում, սկսվում է .gitlab-ci.yml ֆայլում սահմանված CI/CD շղթայի կատարմանը:
.gitlab-ci.yml-ի վերլուծություն: GitLab Runner-ը (կամ ինքնուրույն GitLab-ը, եթե օգտագործվում է ներքին CI) կարդում է կոնֆիգուրացիան.gitlab-ci.yml-ից: Այս ֆայլը նկարագրում է շղթայի փուլերը (stages) և աշխատանքները (jobs):- Runner-ի սկզբնականացում: Նշվում է հասանելի GitLab Runner-ը, որը կկատարի շղթան: Runner-ը ստանում է տեղեկություններ ռեպոզիտորից, commit-ից, ճյուղից և
.gitlab-ci.ymlկոնֆիգուրացիայից: - Կատարելու միջավայրի ստեղծում: Runner-ը պատրաստում է միջավայր աշխատանքների կատարման համար: Դա կարող է լինել՝
- Վիրտուալ մեքենա
- Կոնտեյներ (Docker, Kubernetes)
- Հատուկ սերվեր
- Shell
- Փուլերի (stages) կատարմամբ: Շղթան կատարվում է հերթականությամբ՝ ըստ սահմանված փուլերի
.gitlab-ci.yml-ում: Մի փուլի աշխատանքները կարող են կատարվել միաժամանակ: - Աշխատանքների (jobs) կատարմամբ: Յուրաքանչյուր փուլի մեջ կատարվում են կոնֆիգուրացված աշխատանքները: Աշխատանքը ներառում է՝
- Նշել պատկերը կամ գործարկողը (executor), եթե չի սահմանվել շղթայի կամ
variablesբաժնում: - Ռեպոզիտորիային կլոնավորում (այս արդեն կատարվել է GitLab-ի կողմից, բայց Runner-ը կարող է կատարել
git fetchկամgit checkoutանհրաժեշտ վիճակի համար): - Կեշի վերականգնում (եթե կարգավորել է)՝ արագացնելու համար կառուցումը (օրինակ՝ կախվածությունների բեռնում):
- Սկրիպտների կատարմամբ (
script): Սա հիմնական բովանդակությունն է, որտեղ կատարվում են կառուցման, թեստավորման, վերլուծության կամ տեղակայման հրամանները: - Արտեֆակտների բեռնում (եթե կարգավորել է): Արտեֆակտների արդյունքները (օրինակ՝ կոմպիլյացված բինարային ֆայլեր, հաշվետվություններ) պահվում են հետագա օգտագործման կամ բեռնելու համար:
- Կեշի պահպանություն (եթե կարգավորել է)՝ ապագա արագ մեկնարկների համար:
- Նշել պատկերը կամ գործարկողը (executor), եթե չի սահմանվել շղթայի կամ
- Աշխատանքի կարգավիճակի հաշվետվություն: Runner-ը ուղարկում է յուրաքանչյուր աշխատանքի կատարման կարգավիճակը (հաջողություն, սխալ, չեղարկում) վերադառնալով GitLab-ին: Օգտագործողը տեսնում է առաջընթացը և արդյունքները շղթայի էջում:
- Հաջորդ փուլի անցում: Եթե բոլոր աշխատանքները ընթացիկ փուլում հաջող ավարտվեցին (կամ
allow_failureկարգավորել է), սկսվում է հաջորդ փուլը: Եթե աշխատանքը ավարտվում է սխալով ևallow_failureչի սահմանվել, ամբողջ շղթան ընդհատվում է: - Շղթայի ավարտ: Բոլոր փուլերի կատարմամբ (կամ սխալի դեպքում) շղթան ավարտվում է: Արդյունքները և արտեֆակտները հասանելի են GitLab-ի վեբ ինտերֆեյսով:
Օրինակ .gitlab-ci.yml կառուցվածքը:
// Շղթայի փուլերը սահմանում ենք
stages:
- build
- test
- deploy
// Կառուցման աշխատանքը build փուլում
build_job:
stage: build
image: docker:latest // Օգտագործում ենք Docker պատկերը
script:
- echo "Հավելվածի կառուցում..."
- docker build -t myapp:$CI_COMMIT_SHORT_SHA . // Docker պատկերի կառուցում
artifacts:
paths:
- myapp.tar // Կառուցման արտեֆակտի պահպանում
// Թեստավորման աշխատանքը test փուլում
test_job:
stage: test
image: python:3.9 // Օգտագործում ենք Python պատկերը
script:
- echo "Թեստեր անցկացնել..."
- pip install -r requirements.txt
- pytest // Թեստերի կատարում
needs: ["build_job"] // Զависում է build_job-ի հաջող ավարտից
// Տեղակայման աշխատանքը deploy փուլում
deploy_job:
stage: deploy
image: ubuntu:latest // Օգտագործում ենք Ubuntu պատկերը
script:
- echo "Հավելվածի տեղադրում..."
- echo "Տեղակայման սցենարը այստեղ..." // Տեղակայման սցենար
only: // Կատարվում է միայն master կամ tag-ների դեպքում
- master
- tags
needs: ["test_job"] // Զависում է test_job-ի հաջող ավարտից
Այսպիսով, կոդի ներբեռնումը միայն առաջին քայլն է, որի հետևից սկսվում է ավտոմատացված կառուցման, թեստավորման և տեղակայման բարդ գործընթացը, որը հիմնված է .gitlab-ci.yml կոնֆիգուրացիայի վրա։