Sobes.tech
Middle

Šta se dešava nakon što GitLab preuzme kod?

sobes.tech АИ

Одговор од АИ

Након што GitLab преузме код репозиторијума у радни директоријум, почиње извршавање CI/CD цевовода дефинисаног у фајлу .gitlab-ci.yml.

  1. Анализа .gitlab-ci.yml: GitLab Runner (или сам GitLab ако се користи уграђени CI) чита конфигурацију из .gitlab-ci.yml. Овај фајл описује фазе (stages) и задатке (jobs) цевовода.
  2. Иницијализација Runner-а: Додељује се доступан GitLab Runner за извршавање цевовода. Runner добија информације о репозиторијуму, комиту, грани и конфигурацији .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 или таговима
    - master
    - tags
  needs: ["test_job"] // Зависност од успешног завршетка test_job

Дакле, преузимање кода је само први корак, након чега следи сложен аутоматизован процес изградње, тестирања и распоређивања заснован на конфигурацији .gitlab-ci.yml.