gitlab runner

Thank you for reading this post, don't forget to subscribe!

Настрой­ка GitLab-runner
GitLab Runner — это агент, кото­рый соб­ствен­но и зани­ма­ет­ся выпол­не­ни­ем инструк­ций из спе­ци­аль­но­го фай­ла .gitlab-ci.yml.
В отли­чие от Jenkins ран­не­ры гит­ла­ба напи­са­ны на Go, поэто­му они очень малень­кие и быст­рые. И уме­ют запус­кать зада­чи совер­шен­но раз­лич­ны­ми спо­со­ба­ми: локаль­но, в докер-кон­тей­не­рах, в раз­лич­ных обла­ках или через ssh-кон­нект к како­му либо серверу.
Runner – это сер­вер, кото­рый про­ве­ря­ет код и авто­ма­ти­че­ски запус­ка­ет тести­ро­ва­ние обнов­ле­ний. Что­бы изо­ли­ро­вать сре­ду тести­ро­ва­ния, все тесты сле­ду­ет запус­кать в кон­тей­не­рах Docker.
Для это­го нам нуж­но уста­но­вить Docker на runner-сервер.

wget -qO- https://get.docker.com/ | sh

usermod -aG docker $(whoami)

systemctl enable docker

systemctl start docker

Далее сле­ду­ет уста­нов­ка gitlab-runner.
Для уста­нов­ки необ­хо­ди­мо выпол­нить сле­ду­ю­щие команды:
# Linux x86-64
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash
yum install gitlab-runner

или

[spoiler]wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
chmod +x /usr/local/bin/gitlab-runner
curl -sSL https://get.docker.com/ | sh
useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner[/spoiler]

gitlab-runner start

Gitlab-runner уста­нов­лен и готов к настрой­ке обработчиков.

 

НО РЕКОМЕНДУЕМ уста­но­вить multi-runner

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash

yum install gitlab-ci-multi-runner

gitlab-ci-multi-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

gitlab-ci-multi-runner start


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

gitlab-ci-multi-runner status

gitlab-runner: Service is running!


После чего мож­но реги­стри­ро­вать новый
runer

gitlab-ci-multi-runner register


если заре­ги­стри­ро­ван муль­ти­ра­нер с таким же назва­ни­ем, как и был обыч­ный ранер, реко­мен­ду­ем уда­лить ста­рый и пере­за­пу­стить gitlab-ci-multi-runner
gitlab-ci-multi-runner restart

 

Созда­ние GilLab-runner

Для созда­ния GilLab-runner необ­хо­ди­мо знать url gitlab-ci, и его токен.
Дан­ную инфор­ма­цию мож­но уви­деть в web-интер­фей­се gitlab-администратора:
Admin area->Overview->Runners

Далее выпол­ня­ем интер­ак­тив­ную команду:
gitlab-runner register

gitlab-runner register
# Теперь вво­дим адрес, на кото­ром рас­по­ла­га­ет­ся хост Gitlab

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

# Далее токен ран­не­ра, кото­рый мож­но полу­чить по https://example.com/admin/runners для shared ран­не­ров, для каж­до­го про­ек­та мож­но настро­ить свой, токен мож­но най­ти в репозитории
Please enter the gitlab-ci token for this runner
xxx

# Далее вво­дим опи­са­ние ран­не­ра (или хостнейм)
Please enter the gitlab-ci description for this runner
[hostame] kurlyk

# Теги
Please enter the gitlab-ci tags for this runner (comma separated):
green elephant, pakhom

# Надо ли GitLab выпол­нять не теги­ро­ван­ные рабо­ты (напри­мер, можем захо­теть что­бы выпол­нял с тега­ми rails)
Whether to run untagged jobs [true/false]:
[false]: true

# При­вя­зать ли ран­нер к проекту?
Whether to lock Runner to current project [true/false]:
[true]: true

# Выбор executor (для Pages выбе­рем docker, поче­му не docker с machine уже описывалось)
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker

# Дефолт­ный Image если в .gitlab-ci.yml в репо­зи­то­рии не будет ука­зан Image
Please enter the Docker image (eg. ruby:2.1):
alpine:latest

 

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.1.171/
Please enter the gitlab-ci token for this runner:
FyMR7FxzmodxqL*****# Ваш токен
Please enter the gitlab-ci description for this runner:
shell-ansible # любое описание
Please enter the gitlab-ci tags for this runner (comma separated):
shell-ansible # любой тег
Registering runner… succeeded runner=FyMR7Fxz
Please enter the executor: docker, shell, virtualbox, docker+machine, kubernetes, docker-ssh, parallels, ssh, docker-ssh+machine:
shell # любой необ­хо­ди­мый Вам обра­бот­чик из пердложенных

Для деп­лоя про­ек­та мы будем исполь­зо­вать ansible - пред­ва­ри­тель­но уста­нав­ли­ва­ем его на runner-сервер.
У поль­зо­ва­те­ля gitlab-runner долж­ны быть сле­ду­ю­щие права:
uid=992(gitlab-runner) gid=988(gitlab-runner) groups=988(gitlab-runner),10(wheel),994(docker)

при рабо­те ран­не­ра воз­мож­ны про­бле­мы при запус­ке кон­тей­не­ров, так как у нас исполь­зу­ет­ся прок­си то необ­хо­ди­мо про­пи­сать её в файле:

~/.docker/config.json

в сле­ду­ю­щем виде:
[codesyntax lang="bash" container="none" strict="no"]

[/codesyntax]