Тестирование приложений с помощью GitLab

GitLab — это сайт и система управления репозиториями кода для Git. Также GitLab позволяет разработчикам вести непрерывный процесс развертывания для создания, тестирования и развертывания кода.

По этой инструкции вы настроите GitLab на виртуальной машине, создадите простой проект на языке программирования C++, настроите сценарий тестирования проекта и проверите его выполнение.

Чтобы создать и протестировать проект в среде GitLab:

  1. Подготовьте облако к работе.
  2. Необходимые платные ресурсы.
  3. Создайте виртуальную машину c GitLab.
  4. Настройте GitLab.
  5. Задайте настройки приватности.
  6. Создайте проект.
  7. Настройте и запустите тестирование для проекта.
  8. Настройте и зарегистрируйте runner.
  9. Создайте сценарий тестирования.
  10. Создайте ошибку в проекте.
  11. Как удалить созданные ресурсы.

Подготовьте облако к работе

Перед работой нужно зарегистрироваться в Облаке и создать платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Облако или зарегистрируйтесь, если вы еще не зарегистрированы.
  2. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

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

Подробнее об облаках и каталогах.

В стоимость поддержки сервера для GitLab входит:

Создайте виртуальную машину c GitLab

  1. На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите пункт Виртуальная машина.

  2. В поле Имя введите имя виртуальной машины: gitlab.

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

  4. В блоке Публичные образы нажмите кнопку Выбрать. Выберите публичный образ GitLab.

  5. В блоке Диски выберите жесткий диск SSD размером 20 Гб.

  6. В блоке Вычислительные ресурсы:

    • Выберите платформу виртуальной машины.

    • Укажите необходимое количество vCPU и объем RAM.

      Для корректной работы системы GitLab укажите конфигурацию:

      • Платформа - Intel Cascade Lake.
      • Гарантированная доля vCPU — 100%.
      • vCPU — 2.
      • RAM — 4 ГБ.
  7. В блоке Сетевые настройки:

    • Выберите Сеть и Подсеть, к которым нужно подключить виртуальную машину. Если нужной сети или подсети еще нет, вы можете создать их прямо на странице создания ВМ.
    • В поле Публичный адрес оставьте значение Автоматически, чтобы назначить виртуальной машине случайный внешний IP-адрес из пула Яндекс.Облака, или выберите статический адрес из списка, если вы зарезервировали его заранее.
  8. В блоке Доступ укажите данные для доступа к виртуальной машине:

    • В поле Логин введите предпочтительное имя пользователя, который будет создан на виртуальной машине.
    • В поле SSH-ключ скопируйте ваш открытый SSH-ключ. Пару ключей для подключения по SSH необходимо создать самостоятельно, см. раздел о подключении к виртуальным машинам по SSH.
  9. Нажмите кнопку Создать ВМ.

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

Настройте GitLab

  1. В консоли управления откройте страницу сервиса Compute Cloud. Выберите виртуальную машину gitlab и скопируйте ее публичный IP-адрес.
  2. Откройте в браузере веб-интерфейс GitLab, перейдя по публичному IP-адресу ВМ: http://<публичный IP адрес ВМ.
  3. Откроется стартовая страница, где система предложит создать пароль администратора. Введите пароль, введите пароль повторно и нажмите кнопку Change your password.
  4. Зайдите в систему с учетной записью администратора:
    • Username or emailroot.
    • Password — пароль, установленный на предыдущем шаге.

Задайте настройки приватности

Отключите возможность регистрации других пользователей через страницу авторизации:

  1. Нажмите на раздел Configure GitLab
  2. В панели слева перейдите в раздел Settings и выберите вкладку General.
  3. Нажмите кнопку в блоке Sign-up restrictions нажмите кнопку Expand.
  4. Отключите опцию Sign-up enabled.
  5. Нажмите кнопку Save changes.

Теперь зарегистрировать новых пользователь может только администратор, через вкладку Users в разделе Overview.

Создайте проект

Для того, чтобы создать проект:

  1. На главной странице GitLab выберите Create a project.

  2. На открывшейся странице укажите:

    • Имя проекта: My Project.
    • Группу и идентификатор проекта: root и my-project.
    • При необходимости задайте описание и область видимости проекта.
  3. Нажмите кнопку Create project. Создание проекта

  4. После создания проекта в панели слева перейдите в раздел Settings и выберите вкладку CI/CD.

  5. В блоке Auto DevOps нажмите кнопку Expand, отключите опцию Default to Auto DevOps pipeline и сохраните изменения кнопкой Save changes. Отключение Auto DevOps

  6. Добавьте файл проекта.

    1. В панели слева перейдите в раздел Project и выберите вкладку Details.

    2. На странице проекта нажмите кнопку New file.

    3. Назовите файл test.cpp. Добавьте в него код программы, которая выводит Hello World, если выполняется проверка, что результат умножения 2 × 2 равен 4:

      #include <iostream>
      #include <cassert>
      
      int main() {
        assert(2 * 2 == 4);
        std::cout << "Hello world!" << std::endl;
        return 0;
      }
      

      Добавление файла

    4. Укажите название коммита в поле Commit message.

    5. Нажмите кнопку Commit changes.

Настройте и запустите тестирование для проекта

Runner - это специальная программа, которая осуществляет процесс тестирования и сборки проекта в среде GitLab по заданной вами инструкции.

Настройте и зарегистрируйте runner

  1. Зайдите по SSH на виртуальную машину и перейдите в режим администратора в консоли:

    $ sudo -i
    
  2. Загрузите runner:

    # curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
    
  3. Сделайте runner исполняемым:

    # chmod +x /usr/local/bin/gitlab-runner
    
  4. Создайте отдельного пользователя для запуска runner:

    # useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
    
  5. Установите и запустите runner:

    # gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
    # gitlab-runner start
    
  6. Зарегистрируйте runner в GitLab:

    1. Запустите интерактивную регистрацию командой gitlab-runner register.

    2. Введите адрес вашего GitLab-сервера. При запросе:

      Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com)
      

      введите http://<публичный-IP-адрес-вашей-ВМ>

    3. Введите регистрационный токен для runner. Чтобы его найти, нужно перейти в GitLab на страницу проекта, затем в панели слева выбрать Settings и открыть вкладку CI/CD. После этого нажмите кнопку Expand в блоке Runners. В разделе Set up a specific Runner manually скопируйте токен из третьего пункта и введите его в ответ на запрос:

      Please enter the gitlab-ci token for this runner
      <токен>
      

      Получение токена

    4. На запрос:

      Please enter the gitlab-ci description for this runner
      

      введите описание runner: My runner.

    5. В поле ввода тегов не указывайте ничего, нажмите Enter. Иначе по умолчанию runner не будет выполнять работу без указания соответствующих тегов для проекта.

    6. Укажите среду выполнения. В нашем случае, на запрос:

      Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
      

      введите: shell

На этом установка и настойка runner выполнена. Если все сделано правильно, то на странице, где вы копировали регистрационный токен, должен появиться раздел Runners activated for this project в котором будет отображаться зарегистрированный runner.

Успешная настройка

Создайте сценарий тестирования

Создайте сценарий тестирования, который будет выполнять runner. Сценарий описывается в специальном файле .gitlab-ci.yml, который должен находиться в корневой директории проекта. По сценарию runner будет компилировать исходный файл проекта в исполняемый файл, а затем запускать его.

Так как тестирование будет выполняться в операционной системе ВМ, установите приложения, которые необходимы для тестирования: git для клонирования проекта из репозитория и g++ для компиляции проекта.

Чтобы создать сценарий тестирования:

  1. Подключитесь к ВМ по SSH и установите необходимые приложения:

    $ sudo apt update
    $ sudo apt install -y git g++
    
  2. Добавьте сценарий тестирования:

    1. В веб-интерфейсе GitLab в панели слева перейдите выберите раздел Project и выберите вкладку Details.

    2. На открывшейся странице нажмите кнопку Set up CI&CD.

    3. Откроется страница с предложением добавить новый файл .gitlab-ci.yml, в котором в формате YAML нужно описать сценарий. Добавьте текст сценария:

      stages:
        - build
        - test
        - pack
      
      cache:
        paths:
          - hello
      
      build:
        stage: build
        script: g++ test.cpp -o hello
      
      test:
        stage: test
        script: ./hello
      
      pack:
        stage: pack
        script: gzip -c hello > hello.gz
        artifacts:
          paths:
            - hello.gz
      

      В сценарии указано, что работа разделена на три этапа, которые выполняются последовательно:

      • build — на первом этапе выполняется компиляция проекта в исполняемый файл hello.
      • test — на втором исполняемый файл запускается.
      • pack — на третьем этапе создается архив с исполняемым файлом, который можно будет загрузить через веб-интерфейс GitLab после успешного завершения сценария. В блоке artifacts указаны файлы, доступные для загрузки.

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

      Сценарий тестирования

    4. Нажмите Commit changes

После коммита система автоматически начнет тестировать последний коммит. Процесс тестирования и результаты можно посмотреть, в разделе CI/CD на панели слева. В результате должна появиться строчка с первым тестом и статусом passed. Нажав на значок с облаком вы можете загрузить артефакты сборки.

Создайте ошибку в проекте

Теперь сделайте так, чтобы в проекте произошла ошибка, которую runner должен помочь найти в процессе выполнения тестирования. Для этого:

  1. Зайдите в репозиторий проекта и откройте файл test.cpp.
  2. Нажмите Edit.
  3. Укажите в проверке (assert), что результат выполнения умножения 2 на 2 должен быть равен 5. В этом случае при выполнении программы произойдет ошибка и она завершится некорректно.
    ...
    assert(2 * 2 == 5);
    ...
    
  4. Назовите коммит Wrong assert in test.cpp.
  5. Нажмите Commit Changes.

Откройте раздел CI/CD. В столбце Stages видно, что в результате выполнения теста был успешно пройден первый этап build, а на втором этапе test произошла ошибка. Третий этап pack был пропущен и итоговые артефакты не были сформированы.

Если нажать на статус выполнения failed и перейти на вкладку Failed Jobs, можно увидеть текст ошибки, где указано, что не выполнился assert:

Ошибка выполнения

Как удалить созданные ресурсы

Чтобы перестать платить за развернутый сервер, достаточно удалить созданную виртуальную машину gitlab.

Если вы зарезервировали статический публичный IP-адрес специально для этой ВМ:

  1. Откройте сервис Virtual Private Cloud в вашем каталоге.
  2. Перейдите на вкладку IP-адреса.
  3. Найдите нужный адрес, нажмите значок ellipsis и выберите пункт Удалить.