Введение
-
GitLab
Это набор приложений для управления проектами Git с открытым исходным кодом, разработанных на основе Ruby. Его функции аналогичны Github. Разница в том, что GitLab предоставляет версию сообщества GitLab CE, которую пользователи могут развернуть на своих собственных серверах, чтобы их можно было использовать. внутри команды Репозиторий кода проекта.
-
GitLab CI
Это сервис непрерывной интеграции, предоставляемый GitLab (начиная с версии 8.0, GitLab CI был интегрирован в GitLab), просто создайте файл .gitlab-ci.yml в корневом каталоге вашего хранилища и назначьте Runner проекту, когда Сценарий сборки, который вы написали в .gitlab-ci.yml, будет выполняться при наличии запроса на слияние или операции push.
-
GitLab Runner
Это приложение, которое сотрудничает с GitLab CI для задач построения.GitLab CI отвечает за выполнение различных этапов в файле yml, а GitLab Runner конкретно отвечает за выполнение сценария выполнения каждого этапа.Вообще говоря, GitLab Runner должен быть установленным на отдельной машине. Он привязан к GitLab CI через предоставленную им операцию регистрации. Конечно, вы также можете установить его с помощью GitLab, но в некоторых случаях, когда процесс построения вашего кода очень сильно потребляет ресурсы, это будет перетаскивать GitLab, чтобы предоставить другим пользователям политики для сервисов Git.
-
Среда непрерывной интеграции/развертывания
Непрерывная интеграция означает, что после частой отправки кода разработчики программ могут иметь соответствующую среду, которая может автоматически выполнять сборку и тестирование для отправленного кода, а затем определять, можно ли вновь отправленный код объединить и добавить в мастер в соответствии с результатами тестирования. Среди ответвлений непрерывное развертывание заключается в автоматическом развертывании кода в производственной среде после непрерывной интеграции.
Включить функцию GitLab CI
После версии GitLab 8.0 вы можете включить функцию GitLab CI, выполнив два шага.
- создать новый
.gitlab-ci.ymlфайл в корневом каталоге вашего проекта - Настройте 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, все загружают напрямую скомпилированный бинарный пакет.
-
Загрузите соответствующую версию 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, а затем к справке, как показано ниже:
- Если ваш GitLab более поздней версии, чем 10.0, исполняемый файл GitLab Runner переименовывается в
-
Зарегистрируйтесь в 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, представленный в этой статье, это может не только помочь нам сэкономить много времени на отладке. выпуска и развертывания, мы также уменьшаем количество несчастных случаев в процессе выпуска, вызванных человеческим фактором, и эффективно снижаем риск при разработке проекта.