Меня зовут Иван Сидоренко, я инженер по тестированию в компании Digital Design. Передо мной стояла задача — внедрить запуск автотестов, написанных на Java Selenium.

Я новичок в CI/CD, поэтому столкнулся со множеством проблем. Подробных инструкций в интернете по этой задаче я не нашёл, поэтому, после того, как я разобрался с ней с помощью наших разработчиков, решил написать мануал для таких же новичков, как я.

Я подробно описал все необходимые шаги для того, чтобы настроить CI/CD с помощью GitLab, на примере запуска простой HelloWorld программы, написанной с помощью Java.



Автотесты должны запускаться при каждом пуше изменений разработчиком в репозиторий GitLab. Эта задача соответствует одному из принципов CI/CD — запуск автотестов на каждом этапе разработки продукта. Описывать полную концепцию CI/CD в этом мануале я не буду – эту информацию легко найти в интернете.

А вот чего не найти, так это как настроить CI/CD с помощью GitLab для новичков, с описанием всех необходимых шагов. Об этом и пойдёт речь ниже.

1. Установка Git и получение доступа к репозитарию GitLab


Всё необходимое для запуска проекта я разворачивал на удалённой машине, но так как цель этого мануала — знакомство с основами разворачивания CI/CD, то работать мы будем на локальной машине.

Переходим в GitLab на страницу Projects, в появившемся окне нажимаем кнопку New project


Задаём имя проекта, выставляем значение Private в поле Visibility Project и нажимаем зелёную кнопку Create project.



Поздравляю, проект в GitLab’е создан.



Теперь нам необходимо развернуть локальный репозиторий, из которого будем пушить изменения в GitLab. Для этого нужно сперва установить Git, при установке можно выбирать все значения по умолчанию. Если не было опыта работы с гитом и его установкой, то рекомендую ознакомится с этим курсом на www.youtube.com.

Теперь необходимо настроить переменные среды Git user.name и user.email. Значения берём со страницы GitLab -> Project/Details (получаем эту страницу, как только создаём проект).

git config --global user.name "user name"
git config --global user.email "email@examle.com"

Открываем Git Bash, для этого нажимаем в любой точке на рабочем столе и выбираем Git Bash Here. Теперь последовательно вводим эти две команды.

После этого необходимо создать локальный репозиторий, откуда мы будем пушить все изменения в GitLab. Для этого создаём папку на локальной машине, переходим в неё, открываем Git Bash и последовательно выполняем эти команды (они также доступны на странице GitLab -> Project/Details).

git init
git remote add origin
здесь указываем путь до своего проекта

Теперь наш удалённый репозиторий добавлен. Но прежде чем начать пушить изменения в репозиторий GitLab’а, необходимо настроить SSH ключи.

2. Настройка SSH ключей


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

Открываем Git Bash и вводим:

ssh-keygen -o -t rsa -b 4096 -C email@example.com

Вместо email@example.com подставляем свой email.

Дальше получим сообщение, где будут храниться ключи. Здесь просто нажимаем Enter. Ключи сохранятся в папке вида:

C:\Users\User_name\.ssh

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

Теперь необходимо добавить публичный ключ в GitLab аккаунт. Переходим в папку .ssh и открываем файл id _rsa.pub блокнотом. Копируем содержимое файла и переходим в GitLab. Здесь нужно перейти в настройки пользователя (нажать кнопку справа вверху и выбрать Settings).



Переходим в раздел SSH Keys.

Вставляем в поле Key публичный ключ и нажимаем кнопку Add key.



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

ssh-agent bash
ssh-add ~/.ssh/key

где key — это сгенерированный приватный ключ (файл с именем «id_rsa»)
ssh-agent — программа, для хранения приватных ключей, используемых для аутентификации с открытым ключам (в нашем случае это RSA ключ).

Теперь всё готово для пуша файлов в GitLab. Проверим, всё ли работает. Переходим в репозиторий, который проинициализировали ранее. Добавляем в него пусто txt-файл. После этого последовательно выполняем эти команды в Git Bash.

git add .
git commit -m "Initial commit"
git push -u origin master

Переходим в GitLab на страницу Project/Details и проверяем, что всё нормально запушилось.



3. Создание GitLab раннера (Shell)


Для запуска проектов при пуше в гитлаб нам необходимо развернуть раннер. GitLab Runner — агент для запуска инструкций из специального файла .gitlab-ci.yml. Существует несколько видов раннеров. Рассмотрим установку и запуск одного из самых простых — shell-раннера.

Shell-раннер позволяет запускать проекты на той машине, где этот раннер установлен. Рассмотрим установку этого раннера на нашу локальную машину:

1. Создадим папку для раннера, например С:\GitLab-Runner

2. Качаем раннер по ссылке:
https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-386.exe
Переименовываем в gitlab-runner.exe.

3. Запускаем PowerShell от имени администратора.

4. Переходим в нашу папку:

cd C:\GitLab-Runner

5. Вводим ссылку на GitLab. В GitLab перейти в Settings->CI/CD->Runners.



6. Вводим токен:



7. Вводим описание раннера.

8. Вводим теги для раннера.

9. Выбираем вид раннера – shell.

10. Устанавливаем раннер:

gitlab-runner install

11. И запускаем:

gitlab-runner start

Для того чтобы проверить, что раннер запустился, заходим в GitLab -> Settings -> CI/CD -> Runners. Зелёный кружок означает, что раннер запущен.



4. Настройка переменной среды


Для запуска нашей java-программы нам понадобится:

1. Установить java:
https://java.com/ru/download/

2. Установить jdk: https://www.oracle.com/technetwork/java/javase/downloads/index.html

3. Настроить переменные среды.

Для настройки переменных среды необходимо перейти:
Мой компьютер -> Свойства -> Дополнительные параметры среды -> Переменные среды
Здесь в разделе «Системные переменные» создаём переменную JAVA_HOME, в строке «Значение переменной» прописываем путь до jdk.



Добавляем такое значение в переменную Path. Также необходимо проверить, что существует путь для Java.



5. Создание проекта и его запуск


Создадим простой java-проект, который будет выводить «Hello World!» в консоли. Положим его в наш локальный репозиторий. Выглядеть он будет как-то так:



Здесь я создал файл .gitlab-ci с расширением yml.

Содержимое .gitlab-ci.yml
image: java:latest

stages:
  - build
  - execute
     
build:
 stage: build
 script: 
  - cd C:\GitAuto\src
  - javac Main.java
  
 artifacts:
 tags:
    - first-runner

execute:
  stage: execute
  script:
    - cd C:\GitAuto\src
    - java Main
  artifacts:
  tags:
    - first-runner


Здесь две стадии ? Build и Execute. С помощью команды javac мы компилируем исходный код, а с помощь команды java ? запускаем его. На каждом шаге мы должны явно указывать, какой раннер будем использовать. Раннер определятся по значению его тега (можно посмотреть в настройках раннера в GitLab).

После настройки содержимого файла переходим в локальный репозиторий и открываем Git Bash. Начинаем последовательно выполнять команды:

git add .
git commit -m "Initial commit"
git push -u origin master

Изменения запушены, теперь проверим, что наша программа успешно выполнилась. Переходим в GitLab -> CI/CD -> Jobs, открываем последний джоб:



Программа выполнена, вы великолепны!

Комментарии (5)


  1. capjdcoder
    20.08.2019 16:28
    +1

    Эээ, а вы уверены, что пушить напрямую в мастер — это хорошая идея?

    Посмотрите лучше в сторону Pull Request/Merge Request и добавьте для таких конструкций соответствующее условие.

    Код необходимо ревьюить перед слиянием


  1. levchick
    20.08.2019 16:59

    Эх, вот вроде бы статья написана не плохо: структурировано, с примерами, последовательно. Но действительно ли стоило 50% информации посвящать созданию проекта в гитлабе, установке git, созданию ключей, ...?
    Это же основа основ, и если кто-то не может справится с такими вещами, то зачем ему CI/DI? Имхо, но планка хабра все таки чуть выше. Может стоило более детально рассмотреть варианты runner'ов гитлаба, показать примеры использования разных подходов к CI/DI через Gitlab, расписать преимущества, недостатки, сложности и подходы к их решению.


    1. Ivan_Sidorenko Автор
      20.08.2019 19:07

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

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

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


    1. xsevenbeta
      21.08.2019 08:25

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


  1. LemonFox
    20.08.2019 20:12

    Git Bush

    Не нашел где с мобилки в ЛС написать (или кармы просто нет)