Sobes.tech
Middle

Пас аз он, ки GitLab кодиҳоро боргирӣ мекунад, чӣ мешавад?

sobes.tech AI

Ҷавоб аз AI

Пасе, што GitLab скача код рэпазіторыя ў рабочы каталог, пачынаецца выкананне CI/CD цыкла, вызначанага ў файле .gitlab-ci.yml.

  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 або тэгі
    - master
    - tags
  needs: ["test_job"] // Залежыць ад паспяховага завяршэння test_job

Такім чынам, загрузка кода — гэта толькі першы крок, за якім ідзе складаны аўтаматызаваны працэс зборкі, тэставання і разгортвання, заснаваны на канфігурацыі .gitlab-ci.yml.