Sobes.tech
Middle

Ի՞նչ է տեղի ունենում, երբ GitLab-ը ներբեռնում է կոդը։

sobes.tech AI

Պատասխան AI-ից

Երբ GitLab-ը ներբեռնում է ռեպոզիտորիքի կոդը աշխատանքային գրացուցակում, սկսվում է .gitlab-ci.yml ֆայլում սահմանված CI/CD շղթայի կատարմանը:

  1. .gitlab-ci.yml-ի վերլուծություն: GitLab Runner-ը (կամ ինքնուրույն GitLab-ը, եթե օգտագործվում է ներքին CI) կարդում է կոնֆիգուրացիան .gitlab-ci.yml-ից: Այս ֆայլը նկարագրում է շղթայի փուլերը (stages) և աշխատանքները (jobs):
  2. Runner-ի սկզբնականացում: Նշվում է հասանելի GitLab Runner-ը, որը կկատարի շղթան: Runner-ը ստանում է տեղեկություններ ռեպոզիտորից, commit-ից, ճյուղից և .gitlab-ci.yml կոնֆիգուրացիայից:
  3. Կատարելու միջավայրի ստեղծում: Runner-ը պատրաստում է միջավայր աշխատանքների կատարման համար: Դա կարող է լինել՝
    • Վիրտուալ մեքենա
    • Կոնտեյներ (Docker, Kubernetes)
    • Հատուկ սերվեր
    • Shell
  4. Փուլերի (stages) կատարմամբ: Շղթան կատարվում է հերթականությամբ՝ ըստ սահմանված փուլերի .gitlab-ci.yml-ում: Մի փուլի աշխատանքները կարող են կատարվել միաժամանակ:
  5. Աշխատանքների (jobs) կատարմամբ: Յուրաքանչյուր փուլի մեջ կատարվում են կոնֆիգուրացված աշխատանքները: Աշխատանքը ներառում է՝
    • Նշել պատկերը կամ գործարկողը (executor), եթե չի սահմանվել շղթայի կամ variables բաժնում:
    • Ռեպոզիտորիային կլոնավորում (այս արդեն կատարվել է GitLab-ի կողմից, բայց Runner-ը կարող է կատարել git fetch կամ git checkout անհրաժեշտ վիճակի համար):
    • Կեշի վերականգնում (եթե կարգավորել է)՝ արագացնելու համար կառուցումը (օրինակ՝ կախվածությունների բեռնում):
    • Սկրիպտների կատարմամբ (script): Սա հիմնական բովանդակությունն է, որտեղ կատարվում են կառուցման, թեստավորման, վերլուծության կամ տեղակայման հրամանները:
    • Արտեֆակտների բեռնում (եթե կարգավորել է): Արտեֆակտների արդյունքները (օրինակ՝ կոմպիլյացված բինարային ֆայլեր, հաշվետվություններ) պահվում են հետագա օգտագործման կամ բեռնելու համար:
    • Կեշի պահպանություն (եթե կարգավորել է)՝ ապագա արագ մեկնարկների համար:
  6. Աշխատանքի կարգավիճակի հաշվետվություն: Runner-ը ուղարկում է յուրաքանչյուր աշխատանքի կատարման կարգավիճակը (հաջողություն, սխալ, չեղարկում) վերադառնալով GitLab-ին: Օգտագործողը տեսնում է առաջընթացը և արդյունքները շղթայի էջում:
  7. Հաջորդ փուլի անցում: Եթե բոլոր աշխատանքները ընթացիկ փուլում հաջող ավարտվեցին (կամ allow_failure կարգավորել է), սկսվում է հաջորդ փուլը: Եթե աշխատանքը ավարտվում է սխալով և allow_failure չի սահմանվել, ամբողջ շղթան ընդհատվում է:
  8. Շղթայի ավարտ: Բոլոր փուլերի կատարմամբ (կամ սխալի դեպքում) շղթան ավարտվում է: Արդյունքները և արտեֆակտները հասանելի են 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 կոնֆիգուրացիայի վրա։