20 August 2019

Как запустить java-проект на shell-раннере при пуше в репозиторий GitLab’а

Digital Design corporate blogIT systems testing
Меня зовут Иван Сидоренко, я инженер по тестированию в компании 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, открываем последний джоб:



Программа выполнена, вы великолепны!
Tags:gitlabci/cdавтоматизация тестированияjavacjava
Hubs: Digital Design corporate blog IT systems testing
+7
2.3k 29
Comments 5
Top of the last 24 hours