Используйте GitLab-CI и GitLab-Runner, предоставляемые GitLab, для создания среды непрерывной интеграции/развертывания.

задняя часть
Используйте GitLab-CI и GitLab-Runner, предоставляемые GitLab, для создания среды непрерывной интеграции/развертывания.

Введение

  1. GitLab

    Это набор приложений для управления проектами Git с открытым исходным кодом, разработанных на основе Ruby. Его функции аналогичны Github. Разница в том, что GitLab предоставляет версию сообщества GitLab CE, которую пользователи могут развернуть на своих собственных серверах, чтобы их можно было использовать. внутри команды Репозиторий кода проекта.

  2. GitLab CI

    Это сервис непрерывной интеграции, предоставляемый GitLab (начиная с версии 8.0, GitLab CI был интегрирован в GitLab), просто создайте файл .gitlab-ci.yml в корневом каталоге вашего хранилища и назначьте Runner проекту, когда Сценарий сборки, который вы написали в .gitlab-ci.yml, будет выполняться при наличии запроса на слияние или операции push.

  3. GitLab Runner

    Это приложение, которое сотрудничает с GitLab CI для задач построения.GitLab CI отвечает за выполнение различных этапов в файле yml, а GitLab Runner конкретно отвечает за выполнение сценария выполнения каждого этапа.Вообще говоря, GitLab Runner должен быть установленным на отдельной машине. Он привязан к GitLab CI через предоставленную им операцию регистрации. Конечно, вы также можете установить его с помощью GitLab, но в некоторых случаях, когда процесс построения вашего кода очень сильно потребляет ресурсы, это будет перетаскивать GitLab, чтобы предоставить другим пользователям политики для сервисов Git.

  4. Среда непрерывной интеграции/развертывания

    Непрерывная интеграция означает, что после частой отправки кода разработчики программ могут иметь соответствующую среду, которая может автоматически выполнять сборку и тестирование для отправленного кода, а затем определять, можно ли вновь отправленный код объединить и добавить в мастер в соответствии с результатами тестирования. Среди ответвлений непрерывное развертывание заключается в автоматическом развертывании кода в производственной среде после непрерывной интеграции.

Включить функцию GitLab CI

После версии GitLab 8.0 вы можете включить функцию GitLab CI, выполнив два шага.

  1. создать новый.gitlab-ci.ymlфайл в корневом каталоге вашего проекта
  2. Настройте GitLab Runner для своего проекта

настроить.gitlab-ci.ymlдокумент

.gitlab-ci.ymlЭтот файл представляет собой файл конфигурации, используемый для настройки GitLab CI для процесса сборки.Он использует синтаксис YAML, поэтому вам нужно обратить особое внимание на использование пробелов вместо отступов, а не табуляции. Следующее через мой собственный проект.gitlab-ci.ymlдокумент, чтобы указать его правила

stages:
  - init
  - check
  - build
  - deploy

cache:
  key: ${CI_BUILD_REF_NAME}
  paths:
  - node_modules/
  - dist/

#定义一个叫init的Job任务
init:
  stage: init
  script:
  -  cnpm install

#master_check Job:检查master分支上关键内容
master_check:
  stage: check
  script:
  - echo "Start Check Eros Config ..."
  - bash check.sh release 
  only:
  - master
  
#dev_check Job: 检查dev分支上关键内容
dev_check:
  stage: check
  script:
  - echo "Start Check Eros Config ..."
  - bash check.sh debug
  only:
  - dev

js_build:
  stage: build
  script:
  - eros build

master_deploy:
  stage: deploy
  script:
  - bash deploy.sh release
  only:
  - master

dev_deploy:
  stage: deploy
  script:
  - bash deploy.sh debug
  only:
  - dev

В приведенном выше примере мы используемstagesКлючевые слова для определения четырех этапов: инициализация, проверка, сборка, развертывание в процессе непрерывной сборки.

Относительно стадий в GitLab CI есть следующие особенности:

1. 所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始
2. 只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功
3. 如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败

Затем мы используемcachesПоле для указания каталога файлов, к которому необходимо предоставить общий доступ в следующих задачах задания. Если нет, GitLab Runner удалит его при запуске каждого задания..gitignoreфайл внутри

Далее мы определяемinitjob, который объявлен полем stage как принадлежащийinitstage, поэтому это задание будет выполняться первым, и в этом задании мы выполняем некоторую работу по инициализации среды.

Далееcheckэтап, используемый для проверки некоторых основных ошибок в коде (спецификация кода и тому подобное, которые не будут обнаружены компилятором), и некоторые проверки файла конфигурации, я буду называть егоmaster_checkиdev_check, Используйте единственное поле, чтобы сообщить GitLab CI, что это задание будет запущено только тогда, когда в соответствующей ветке есть операция push.

Тогда есть кодbuildСтадия, так как эта стадия не похожа на последнюю крайность, здесь нет команды для различения разных ветвей, поэтому необходимо определить только одно задание.

Последнийdeploy, потому что разные ветки должны быть выпущены в разные среды, поэтому два задания по-прежнему различаются только.

Что касается Jobs, в GitLab CI также есть следующие особенности:

1. 相同 Stage 中的 Jobs 会并行执行
2. 相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
3. 如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败

В этой моей задаче по сборке используется только несколько ключевых слов в соответствии с моей деловой ситуацией, и есть еще много похожих наbefore_script,after_scriptи другие ключевые слова, подробности см.Официальная документация GitLab

после того, как мы закончим.gitlab-ci.ymlПосле того, как процесс написан, вы можете поместить его в корневой каталог проекта, а затем отправить его в наш GitLab, В это время, если вы откроете вкладку Piplines на домашней странице проекта, вы найдете статус, отмеченный какpendingЗадача сборки, как показано на следующем рисунке:

В настоящее время, поскольку эта задача сборки по-прежнему находит доступный GitLab Runner для выполнения своего сценария сборки, после того, как мы получим следующий доступ к GitLab Runner для нашего проекта, статус этих задач будет изменен наpenddingстатьrunningохватывать

Установите GitLab Runner

Найдите машину, подходящую для установки GitLab Runner, будь то Windows, Mac или Linux, желательно машину, которая относительно простаивает и может быть включена 24 часа в сутки, мы вОфициальный сайт GitLab RunnerНайдите установочные файлы нашей платформы и соответствующий процесс установки. Поскольку я собираюсь установить GitLab Runner на простаивающий компьютер iMac, я продемонстрирую установку GitLab Runner под MacOS:

Процесс установки GitLab Runner одинаков для macOS и Linux/UNIX, все загружают напрямую скомпилированный бинарный пакет.

  1. Загрузите соответствующую версию GitLab Runner для GitLab.

    • Если ваш GitLab более поздней версии, чем 10.0, исполняемый файл GitLab Runner переименовывается вgitlab-runner
    sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
    sudo chmod +x /usr/local/bin/gitlab-runner
    
    • Версии между 9.0 и 10.0
    sudo curl --output /usr/local/bin/gitlab-ci-multi-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-darwin-amd64
    sudo chmod +x /usr/local/bin/gitlab-ci-multi-runner
    
    • До 9.0, поскольку новый интерфейс API4 включен после 9.0, если ваш GitLab имеет версию до 9.0, вам необходимо загрузить следующую версию, иначе ваш GitLab Runner не будет зарегистрирован
    sudo curl --output /usr/local/bin/gitlab-ci-multi-runnerhttps://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/v1.11.1/binaries/gitlab-ci-multi-runner-darwin-amd64
    sudo chmod +x /usr/local/bin/gitlab-ci-multi-runner
    
    Я не знаю, заметили ли вы v1.11.1 в приведенной выше ссылке для скачивания. Это соответствующий Gitlab Runner. Если ваш GitLab версии до 9.0, вы не можете зарегистрировать его в GitLab Runner v1.11.1. Вы можете попробовать Понизьте несколько версий GitLab Runner, все версии, выпущенные GitLab Runner, можно найти вGitLab Runner Tagsоказаться

    Если вы столкнулись с тем, что не можете определить номер версии GitLab, войдя на сервер, вы можете напрямую получить доступ к домашней странице gitlab, а затем к справке, как показано ниже:

  2. Зарегистрируйтесь в GitLab Runner

    Выполните следующую команду,

    sudo gitlab-ci-multi-runner register
    

    Если ваш терминал сообщает, что команда не может быть найдена, пожалуйста, передайтеexport PATH=/usr/local/bin:$PATHДобавьте каталог /usr/local/bin в переменную окружения, иначе вы пропустили указанную выше команду chmod, и файл стал неисполняемым.

    После выполнения вышеуказанной команды вам будет предложено ввести следующую информацию:

    • Please enter the gitlab-ci coordinator URL:
    • Please enter the gitlab-ci token for this runner:
    • Please enter the gitlab-ci description for this runner
    • Please enter the gitlab-ci tags for this runner (comma separated):
    • Whether to run untagged builds [true/false]:
    • Please enter the executor:

    URL-адрес и токен координатора можно найти на вкладке Runner проекта, необходимого для выполнения непрерывной интеграции.

    Описание и теги можно определить самостоятельно.Будет ли сборка отправляться без тегов, также выбирается в соответствии с вашими потребностями.По умолчанию false, и исполнитель выбирает оболочку.

    После заполнения, если будет предложеноRegistering runner... succeededУказывает, что Runner был успешно зарегистрирован. После того, как вы вернетесь на страницу Runners проекта, вы найдете дополнительный Runner в активном состоянии ниже.

    Сразу после последнего шага запустите Runner, который мы только что зарегистрировали.

    sudo  gitlab-ci-multi-runner start
    

    Теперь, когда мы вернемся к Pipelines проекта, мы обязательно обнаружим, что задача, которая была в состоянии peding, начала выполняться.Мы можем нажать эту кнопку состояния, чтобы просмотреть журнал вывода каждого этапа в режиме реального времени.

Включить оповещения по электронной почте о состоянии сборки

Если вы хотите получать электронные письма о статусе каждой задачи сборки в режиме реального времени, вы можете включить службу электронной почты сборки на вкладке службы вашего проекта.

Эпилог

Создание быстрой и удобной среды непрерывной интеграции и непрерывного развертывания является очень важной мерой для разработки проекта.Используете ли вы знаменитый jenkins или GitLab CI, представленный в этой статье, это может не только помочь нам сэкономить много времени на отладке. выпуска и развертывания, мы также уменьшаем количество несчастных случаев в процессе выпуска, вызванных человеческим фактором, и эффективно снижаем риск при разработке проекта.

Если вы хотите общаться со мной, вы можете подписаться на мой номер подписки: