Middle
Пас аз он, ки GitLab кодиҳоро боргирӣ мекунад, чӣ мешавад?
sobes.tech AI
Ҷавоб аз AI
Пасе, што GitLab скача код рэпазіторыя ў рабочы каталог, пачынаецца выкананне CI/CD цыкла, вызначанага ў файле .gitlab-ci.yml.
- Аналіз
.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 або тэгі
- master
- tags
needs: ["test_job"] // Залежыць ад паспяховага завяршэння test_job
Такім чынам, загрузка кода — гэта толькі першы крок, за якім ідзе складаны аўтаматызаваны працэс зборкі, тэставання і разгортвання, заснаваны на канфігурацыі .gitlab-ci.yml.