После того, как компания создала внутреннюю платформу GitLab, активные интерфейсные проекты были перенесены из SVN в GitLab. В этой статье описывается, как автоматизировать сборки и выпуски на основе GitLab CI/CD.
В процессе миграции с SVN на GitLab и доступа к GitLab CI/CD я хотел бы поблагодарить систему выпуска и студентов, изучающих серверную часть, за их мощную поддержку.
1. Текущий процесс сборки и выпуска
В этом разделе мы сначала расскажем о преимуществах использования GitLab CI/CD, а затем представим процессы сборки и выпуска до и после использования GitLab CI/CD.
1. Командные преимущества
- Время публикации сократилось в среднем с 5 минут до 1,5 минут.. От 5 минут ручной работы до 1,5 минут простого слияния кода ветки, автоматизации сборки и выпуска.
- Фронтенд-сборки размещаются в CI/CD, что решает проблему, связанную с тем, что локальные сборки могут привести к несоответствиям после онлайн-упаковки кода.
2. Соберите и выпустите перед использованием GitLab CI/CD
2.1 Процесс
- После завершения разработки выполните сборку локально и отправьте упакованный HTML-файл после сборки.
- Откройте систему публикации и опубликуйте файл HTML.
2.2 Болевые точки
- Операционный процесс публикации кода длительный и трудоемкий. После завершения разработки, когда код выпущен, с ним нужно пройти много ручных операций, а система выпуска медленная, и каждый выпуск занимает около 5 минут.
- Локальная среда каждого человека непоследовательна, и существует риск несогласованности при выпуске различных онлайн-кодов.
Требуется примерно 2,3 пункта вручную
Всего по крайней мере в 8 раз ручной операции
Локальная сборка:
- Выполните команду сборки и дождитесь завершения сборки.
- После завершения сборки отправьте упакованный HTML-файл.
Почтовый индекс:
- Откройте систему публикации
- Выберите проект выпуска и среду
- Откройте страницу выпуска
- Выберите файл релиза
- Заполните информацию о выпуске
- Нажмите, чтобы подтвердить выпуск
3. Сборка и выпуск с использованием GitLab CI/CD
Выпуск кода за один шаг: просто объедините ветку разработки с веткой, соответствующей среде выпуска, и после отправки ветки GitLab CI/CD автоматически соберет и выпустит.
2. Что такое GitLab CI/CD
В этой части мы сначала кратко расскажем о GitLab CI/CD, а затем расскажем, как создать GitLab CI/CD с нуля.
1. Краткое введение в GitLab CI/CD
Как показано на рисунке ниже, после отправки кода в GitLab конвейер будет запущен для автоматической сборки и публикации после выполнения указанных условий.
Конвейер можно понимать как задачу сборки, которая может содержать несколько процессов, таких как загрузка зависимостей, выполнение тестов, компиляция и развертывание. Когда конвейер запускается, он делится на несколько процессов, и то, что делает каждый процесс, находится в проекте..gitlab-ci.yml
определяется в файле.
Для наших активных проектов конвейер в основном включает три процесса: загрузка зависимостей, сборка кода и выпуск на сервер. Практическая часть будет подробно представлена позже.
2. Общий процесс GitLab CI/CD
Конкретный процесс и работа конвейера GitLab CI/CD объявлены в файле .gitlab-ci.yml.После запуска конвейера GitLab Runner запустит его в соответствии с файлом .gitlab-ci.yml и вернуться в систему GitLab после запуска.
2.1 Файл .gitlab-ci.yml
Файл .gitlab-ci.yml — это файл декларации, используемый для определения процесса GitLab CI/CD, разделенного на несколько этапов и того, что делает каждый этап.
Что касается того, что делать и как это делать, в основном используются операции командной строки и сценариев, и подробное введение будет сделано в практической части позже.
Если задействована какая-то логика, то будут использоваться скрипты, в нашем проекте в основном используются скрипты Shell и скрипты Python.
2.1 GitLab Runner
GitLab Runner — это среда выполнения CI, отвечающая за выполнение файла gitlab-ci.yml и возврат результата в систему GitLab. Раннер может принимать разные формы, докер, виртуальную машину или оболочку, и метод выбирается при регистрации раннера.
3. Создайте GitLab CI/CD с нуля
Чтобы понять весь процесс, вы можетеGitLabСоздайте проект и запустите весь процесс CI/CD.
3.1 Создайте новый проект GitLab
- Войдите в GitLab:gitlab.com/
- Создайте новый собственный проект
3.2 Настройка бегуна
GitLab предоставляет какие-то общие раннеры, мы не можем разобраться с раннерами.
3.3 Создайте новый файл .gitlab-ci.yml
- Перетащите проект на локальный
- Создайте новый файл .gitlab-ci.yml в корневом каталоге проекта.
- Зафиксируйте файл .gitlab-ci.yml
- В CI/CD проекта вы можете увидеть работу CI/CD
Пример файла .gitlab-ci.yml
image: node
# 定义 stages
stages:
- build
- test
# 定义 job
build 阶段:
stage: build
script:
- echo "build stage"
# 定义 job
发布到测试环境:
stage: test
script:
- echo "test stage"
3. Доступ нового проекта к процессу GitLab CI/CD
Если у команды есть новый проект, который необходимо подключить к GitLab CI/CD, сначала подайте заявку на проект GitLab, а затем попросите сопровождающего системы GitLab помочь настроить Runner, написать файл .gitlab-ci.yml и запустить сборку, чтобы увидеть ситуацию с CI/CD.
- Создайте новый проект GitLab
- Настроить GitLab Runner
- Файл .gitlab-ci.yml
В настоящее время к GitLab CI/CD подключены два новых маршрута проекта, и доступ хороший, и процесс работы в соответствии с документом относительно гладкий.
4. Практика GitLab CI/CD
В практической части здесь представлены GitLab Runner и файл .gitlab-ci.yml Основные процессы, проблемы и решения, которые встречаются, включены в процесс введения файла .gitlab-ci.yml.
1. GitLab Runner
GitLab Runner обычно управляется системным мейнтейнером GitLab.После настройки похожие проекты могут быть общими и, как правило, их не нужно изменять. Здесь не дается никакого специального введения, но в основном представлены моменты, на которые следует обратить внимание во время использования.Документация по GitLab Runner.
1.1 Процесс использования GitLab Runner
- Скачать GitLab Runner
- Зарегистрируйтесь в GitLab Runner
- Использование GitLab Runner
1.2 Примечания к GitLab Runner
В процессе использования Runner мы столкнулись с некоторыми проблемами, ниже приводится краткое описание проблем и их решения без конкретного описания.
1.2.1 После настройки Runner отправьте код и запустите конвейер, но он находился в состоянии Pending
Сообщение об ошибке: Это задание зависло, потому что у вас нет активных исполнителей, которые могли бы запустить это задание.
Зарегистрированные исполнители по умолчанию не будут использовать задания без тегов.Вы можете перейти в «Настройки» → «CI/CD» → «Настройки исполнителей» и удалить задания бегунов без тегов.
1.2.2 Типы исполнителей GitLab
Существует три типа исполнителей. Общие исполнители можно использовать во всех проектах во всей системе. После регистрации групповых исполнителей различные базы кода в рамках одного проекта становятся общими. Конкретные исполнители необходимо настраивать отдельно для проекта. Бегуны, обратите внимание, нужно ли закрывать Shared Runners и Group Runners.
- Shared Runners
- Specific Runners
- Group Runners
1.2.3 Использование докера в GitLab CI
При развертывании в Alibaba Cloud вам необходимо использовать докер для публикации образов в GitLab CI/CD. может относиться кBuilding Docker images with GitLab CI/CD
1.2.4 Доступ к каталогу хоста Runner в GitLab CI/CD
Используемый нами исполнитель Runner — Dokcer, а каталоги, к которым необходимо получить доступ, настраиваются в томах Dokcer.
2. Файл .gitlab-ci.yml
Файл .gitlab-ci.yml активного проекта выглядит следующим образом. Ниже в основном представлен наш практический процесс и подробное использование .gitlab-ci.yml через файл .gitlab-ci.yml активного проекта. кСправочная документация по настройке конвейера GitLab CI/CD
2.1 Знакомство с файлом .gitlab-ci.yml
image
Базовый образ Docker, реализующий зависимости CI/CD. В зеркале есть Node, Yarn, Dalp (внутренний инструмент rsync).
stages
Определенный в нашем пайплайне разделяется на следующие процессы:
- Загрузить этап pre_build зависимостей
- сборка фазы сборки
- этап выпуска
stage
Объявить текущий этап, используемый в этапах
variables
используется для определения переменных
before_script
Действия перед выполнением скрипта
script
Операция, которую необходимо выполнить на текущем этапе
changes
Укажите условия запуска этапа
refs
Укажите ветку, запускаемую стадией
image: registry.huajiao.com/gitlab-ci/node-yarn:v1.4
variables:
# $CI_PROJECT_PATH : 项目id,用于项目唯一区分本项目与其它项目
# $CI_PROJECT_DIR : 本地项目路径
# $PROCESS_PATH : 临时文件目录(包括日志和一些临时文件)
NODE_MODULES_PATH: /runner-cache/frontend/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME/node_modules
stages:
- pre_build
- build
- deploy
下载依赖:
before_script:
# 无 node_modules 文件时,新建 node_modules 文件
- /bin/bash ./ci/mkdir.sh $NODE_MODULES_PATH
# 软链 node_modules 到宿主机
- ln -s $NODE_MODULES_PATH .
- cd webpack@next
stage: pre_build
script:
- echo "yarn install"
- yarn install --network-timeout 60000
only:
changes:
- webpack@next/package.json
refs:
- test
- test-99
- test-128
- master
- ci
- feature/ci-test
构建:
stage: build
variables:
CI_COMMIT_BEFORE_SHA_PATH: /mnt/gv0/gitlab-runner-cache/$CI_PROJECT_PATH
CI_COMMIT_BEFORE_SHA_FILE_NAME: $CI_BUILD_REF_NAME.sh
CI_COMMIT_BEFORE_SHA_FILE: /mnt/gv0/gitlab-runner-cache/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME.sh
before_script:
# 建存此次 CI CI_COMMIT_SHA 的文件
- /bin/bash ./ci/mkfile.sh $CI_COMMIT_BEFORE_SHA_PATH $CI_COMMIT_BEFORE_SHA_FILE_NAME
# 软链 node_modules 到宿主机
- ln -s $NODE_MODULES_PATH .
- rm -rf php/share/*
- cd webpack@next
script:
# 缓存上次ci
- source $CI_COMMIT_BEFORE_SHA_FILE
- echo "CI_COMMIT_BEFORE_SHA=$CI_COMMIT_SHA" > $CI_COMMIT_BEFORE_SHA_FILE
- python3 ../ci/build.py # 编译
- /bin/bash ../ci/commit.sh # 提交编译结果
only:
changes:
- www_src/**/*
refs:
- test
- test-99
- test-128
- master
- ci
测试发布:
stage: deploy
variables:
PROCESS_PATH: /mnt/gv0/gitlab-runner-cache/deploy/process/$CI_JOB_ID # 目录不要换,用于日志服务器获取日志展示
script:
- mkdir $PROCESS_PATH # 建立发布临时路径,存放发布配置中间文件和结果日志用
- dplt $CI_PROJECT_DIR/.deploy_test.yml $CI_PROJECT_PATH $CI_PROJECT_DIR/php/ $PROCESS_PATH
# dplt 发布yml配置
- echo "发布完成,错误日志查看http://new.admin.wolffy.qihoo.net/log?path="$PROCESS_PATH
- echo `ls $PROCESS_PATH/*.log`
only:
changes:
- php/**/*
refs:
- test
2.2 Этап загрузки зависимостей (этап pre_build)
Решение для загрузки зависимостей: при изменении файла package.json запустить этап pre_build и выполнить установку пряжи. Загруженные node_modules размещаются под хостом, а зависимости получаются через мягкую цепочку во время выполнения.
2.3 Этап сборки
Фаза сборки, разделенная на 3 части
- изменения файла различий
- интерфейсная сборка
- Результаты после фиксации сборки
2.3.1 изменения файлов различий
Для каждого ЭК сохраните текущий SHA фиксации ЭК (переменная CI_COMMIT_SHA) в файле как переменную CI_COMMIT_BEFORE_SHA.При сравнении git diff сравнит изменения между текущим ЭК и SHA последней фиксации.
2.3.2 Интерфейсная сборка
По изменениям git diff определите проект, который нужно запаковать на этот раз.
2.3.3 HTML-файл, сгенерированный после упаковки фиксации
При отправке кода в GitLab CI/CD используйте хранилище учетных данных Git для отправки упакованного HTML-файла. Подробнее о хранилище учетных данных Git см.Документация по хранилищу учетных данных
2.4 Этап развертывания
На этапе публикации используйте внутренний инструмент rsync dplt для развертывания упакованного HTML-файла. dplt может настроить кластер, список машин.
V. Текущие проблемы и будущие направления
- Для непрерывной интеграции, несмотря на автоматическую сборку и выпуск, ключевая ссылка для тестирования отсутствует.
- С помощью GitLab CI/CD мы добились согласованности онлайн-среды, но локальная среда разработки и онлайн-среда по-прежнему несовместимы, локально проблем может не быть, но могут быть проблемы онлайн.
- После перехода с SVN на разработку Git стратегии управления ветвями, соглашения об именах ветвей, спецификации сообщений коммитов, CodeReview и т. д. должны быть стандартизированы шаг за шагом в команде.
6. Основные справочные материалы
Что такое непрерывная интеграция?
Introduction to CI/CD with GitLab
Непрерывная интеграция с GitLab CI
Как реализовать непрерывную интеграцию и непрерывное развертывание интерфейсной разработки?