Установка gitlab и gitlab-runner в docker-контейнере
1. Создаем новую виртуалку в Vagrant (см.Vagrantfile):
...
{
:hostname => "glab14." + DOMAIN,
:ip_int => BRIDGE_NET + "148",
:ram => 3000,
# :hdd_name => "db2_hdd.vdi",
# :hdd_size => "10000"
}
...
2. vagrant up glab14.csdiary.net
3. Пробуем зайти (пароль 1qa2ws);
slogin -l deploy 192.168.9.148
4. На хост-машине делаем беспарольный вход в новую виртулку (для ansible):
ssh-copy-id -i ~/.ssh/id_rsa.pub deploy@192.168.9.148
и пробуем зайти без пароля:
slogin -l deploy 192.168.9.148
5. Правим /etc/resolv.conf и проверяем доступ в Интернет !
6. Правим файл hosts для Ansible и деплоим Docker &Co:
deploy@dev14:~/dinf_playbks/DOCKER_DEB$ ansible-playbook -i ../hosts docker_debian.yml
7. Заходим в виртуалку и поднимаем gitlab с помощью docker-compose
файл docker-compose.yml :
version: '2'
services:
gitlab:
image: gitlab/gitlab-ce:latest
hostname: glab14
container_name: glab14
restart: always
volumes:
- /srv/gitlab/config:/etc/gitlab
- /srv/gitlab/logs:/var/log/gitlab
- /srv/gitlab/data:/var/opt/gitlab
ports:
- "80:80"
- "443:443"
- "10022:22"
ВАЖНО! hostname: glab14 (или container_name?) должно разрешаться через DNS!!!
Это надо для работы gitlab-runner!
docker-compose up -d
ждем закачки, старта и проверяем...
docker ps
gitlab должен быть healthy !
8. Меняем пароль для root используя инструкцию:
deploy@arch1:~$ docker exec -u 0 -ti glab14 bash
root@gitlab:/#
root@gitlab:/# gitlab-rails console -e production
-------------------------------------------------------------------------------------
GitLab: 11.4.10 (97fd4e2)
GitLab Shell: 8.3.3
postgresql: 9.6.8
-------------------------------------------------------------------------------------
Loading production environment (Rails 4.2.10)
irb(main):001:0>
irb(main):002:0*
irb(main):003:0* user = User.where(id: 1).first
=> #<User id:1 @root>
irb(main):004:0> user.password = 'okolobaha'
=> "okolobaha"
irb(main):005:0> user.password_confirmation = 'okolobaha'
=> "okolobaha"
irb(main):006:0> user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: 788d6aa7-5a55-495c-a751-237aff2148a7) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1
=> true
irb(main):007:0> exit
root@gitlab:/#
9. пробуем зайти с новым паролем root'a.
10. Заводим пользователя и ставим ему пароль (кнопка Edit).
Menu -> Admin - Newuser
11. Заходим новым пользователем. (попросит сменить пароль!)
12. На машине с проектом делаем:
cd hiaxons
git init
git remote add origin http://192.168.9.148/axon/hiaxons.git
# тут ошибка в порту сервера. Контейнер с gitlab висит на 8088!
git add .
git commit -m "Initial commit"
git push -u origin master
# выдает ошибку из-за порта. Правим remote
git remote -v
git remote set-url origin http://192.168.9.148:8088/axon/hiaxons.git
git remote set-url --push origin http://192.168.9.148:8088/axon/hiaxons.git
git push -u origin master
Проект появится в списке проектов пользователя.
13. В корень проекта добавляем .gitlab-ci.yml
stages:
- build
Buildimg:
stage: build
tags:
- sloganindo
script:
- docker build -t slogan .
- docker ps
и
git add .gitlab-ci.yml
git commit -m "Add .gitlab-ci.yml "
git push -u origin master
смотрим первый pipeline (в проекте CI/CD (ракета) -> Pipelines). Он повис, т.к. нет runners for job!
14. Устанавливаем и настраиваем gitlab-runner на целевой машине.
На машине должен быть установлен Docker (для нашего script).
Делаем как написано в файле GitlabReadme.txt
gitlab-runner install and start on DEV-node
===========================================
#
# This is manual downloading, see task "Download gitlab-runner" in docker_debian.yml
#
wget --content-disposition https://packages.gitlab.com/runner/gitlab-runner/packages/debian/stretch/gitlab-runner_11.4.0_amd64.deb/download.deb
sudo dpkg -i gitlab-runner_11.4.0_amd64.deb
sudo gitlab-runner status
gitlab-runner register -u http://192.168.9.148 -r 2uEGWWMWWRDGsUGfsyLs \
-n --executor shell --tag-list "sloganindo" --name "f_runner"
OR (if the name gitlab resolved (i.e. in your dnsmasq))
gitlab-runner register -u http://gitlab -r 2uEGWWMWWRDGsUGfsyLs \
-n --executor shell --tag-list "sloganindo" --name "f_runner"
токен (-r) берем из GitLab (проект) -> Settings (шестеренка) -> CI/CD -> Runners (Expand button) -> Specific runners
Здесь же их видно после регистрации (Available specific runners)
Если gitlab запущен в той же сети и имеет доступ снаружи по https (https://gla.csdiary.net),
то в локальном dnsmasq.conf переопределяем имя:
address=/gla.csdiary.net/192.168.10.252
теперь по этому имени будет разрешаться адрес в локалке.
Регистрируем:
gitlab-runner register -u https://gla.csdiary.net -r yHtTTfc_Y-fdkyarMzMG -n --executor shell --tag-list "sloganim" --name "runner_1"
Еще делаем (!)
sudo usermod -aG docker gitlab-runner
sudo service docker restart
Полезные команды:
sudo systemctl status gitlab-runner
sudo gitlab-runner verify
Дикуссия про проблемы подключения runner'a к gitlab по https
***********
Создаем runner:
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.ocker run -d --name gitlab-runner --restart always \
Регистрируем зайдя в контейнер ( docker exec -it gitlab-runner /bin/bash ):
gitlab-runner register \
--non-interactive \
--url "https://gla.csdiary.net/" \
--registration-token "yHtTTfc_Y-fdkyarMzMG" \
--executor "docker" \
--docker-image "docker:19.03.12" \
--description "docker-runner" \
--tag-list "slogan6" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock
Ищем его в gitlab.
******************************
15. Проверяем статус pipline. Он должен быть passed, т.к. был найден runner.