GitLab включает в себя утилиты, которые позволяют нам создавать конвейеры, которые можно использовать для CI (непрерывная интеграция) и CD (непрерывная доставка).

Мы будем создавать конвейер для проекта React, созданного с помощью create-react-app. Трубопровод будет выполнять 3 функции.

  1. Строим проект
  2. Запуск модульных тестов
  3. Развертывание нашего файла

Сначала мы начнем с создания нашего приложения для реагирования, выполнив следующую команду

npx create-react-app my-app

Затем мы перейдем в GitLab и войдем в систему, затем создадим репозиторий и загрузим наши файлы проекта, используя следующие команды

cd my-app
git remote rename origin old-origin
git remote add origin YOUR_REPOSITORY_URL
git push -u origin --all
git push -u origin --tags

Теперь у нас есть репозиторий, отправленный в GitLab. Пришло время создать наш файл CI / CD.

Создайте новый файл с именем «.gitlab-ci.yml» в корне репозитория. Файл gitlab-ci - это файл yaml, содержащий сценарии, которые будут выполняться GitLab Runner. Наш конвейер будет работать под докер-контейнерами.

Начнем с определения образа докера, который будет использоваться конвейером.

image: node:latest

Это означает, что все задания, для которых не предусмотрено изображение, будут выполняться под образом узла.

Теперь давайте определим 3 этапа, которые будет выполнять конвейер; Сборка, тестирование и развертывание.

image: node:latest

stages:
 - build
 - test
 - deploy

Это означает, что теперь мы можем назначать задания на один из этапов, описанных выше. Упорядочение элементов по этапам определяет порядок выполнения заданий. Мы начнем с определения 3 заданий: сборки, тестирования и развертывания, и мы предоставим каждому свой этап в конвейере.

image: node:latest

stages:
 - build
 - test
 - deploy
build:
  stage: build
  script:
    - 
test:
  stage: test
  script:
    - 
deploy:
  stage: deploy
  script:
    - 
    -

Затем мы определим, что происходит в каждом задании в ключе сценария, мы начнем со сценария сборки. В случае React мы запустим 2 команды для сборки проекта. npm install для установки зависимостей и npm run build для сборки проекта. Мы добавим артефакт, который можно будет скачать. Артефакты заданий загружаются в GitLab и загружаются одним архивом с помощью пользовательского интерфейса GitLab или GitLab API.

build:
  stage: build
  script:
    - npm install
    - npm run build
  artifacts:
    paths:
     - build/

Для тестирования проекта запустим npm test.

test:
  stage: test
  script:
    - npm test

Что касается части развертывания, мы будем развертывать в корзине Amazon S3, поэтому нам нужно внести некоторые дополнительные изменения, чтобы иметь возможность использовать aws cli для загрузки. Мы начнем с переопределения базового образа и использования образа докера, в котором установлен aws cli. Затем мы будем использовать следующую команду для загрузки наших файлов со стадии сборки.

deploy:
  stage: deploy
  image: tstrohmeier/awscli
  script:
    - aws s3 cp build/ s3://react-cicd-test/ --recursive

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

deploy:
  stage: deploy
  image: tstrohmeier/awscli
  script:
    - aws s3 cp build/ s3://react-cicd-test/ --recursive 
  when: manual

Теперь файл должен выглядеть так

image: node:latest
stages:
 - build
 - test
 - deploy

build:
  stage: build
  script:
    - npm install
    - npm run build
  artifacts:
    paths:
     - build/
test:
  stage: test
  script:
    - npm test
deploy:
  stage: deploy
  image: tstrohmeier/awscli
  script:
    - aws s3 cp build/ s3://react-cicd-test/ --recursive 
  when: manual

На этом этапе конвейер должен работать и иметь возможность развернуть наш проект реакции в корзине S3, однако aws cli необходимы учетные данные, чтобы иметь возможность загружать файлы в нашу корзину.

Итак, нам нужно добавить некоторые переменные среды в репозиторий. В GitLab мы перейдем в наш репозиторий, затем перейдем в Настройки - ›CI / CD -› Переменные.

Добавить описание

Нам нужно будет добавить 2 переменные для aws cli, AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY.

Добавить описание

Образ aws cli может автоматически получать учетные данные без редактирования нашего файла gitlab-ci.

Наконец, любая новая фиксация в репозитории запустит конвейер.

Добавить описание

Ресурсы

Документация Gitlab CI / CD

Полные ссылки на файлы Gitlab-ci

Репозиторий проектов