gitlab in docker-compose

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

Если необ­хо­ди­мо поста­вить gitlab и gitlab-runner локаль­но то сле­ду­ем сле­ду­ю­щей инструкции:

 

ста­вим docker:

yum remove docker docker-engine docker.io
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl start docker
systemctl enable docker

ста­вим docker-compose

https://github.com/docker/compose/releases
на теку­щий момент самая послед­няя версия:
2,6,1

https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64

выка­чи­ва­ем её:

curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

всё гото­во.

 

cat /etc/hosts

192.168.49.1 gitlab.local  registry.gitlab.local

mkdir gitlab

cat  docker-compose.yml

Эта кон­фи­гу­ра­ция опре­де­ля­ет, какие кон­тей­не­ры мы хотим запу­стить. В нашем слу­чае это будет сер­вис GitLab с одним GitLab runner (отдель­ным моду­лем для запус­ка задач CI/CD). Наи­бо­лее важ­ны­ми пара­мет­ра­ми кон­фи­гу­ра­ции являются:

  • image — образ доке­ра, кото­рый мы хотим исполь­зо­вать на нашем сервере
  • пор­ты — спи­сок пор­тов, кото­рые мы дела­ем доступ­ны­ми вне кон­тей­не­ра. В нашей кон­фи­гу­ра­ции мы предо­став­ля­ем пор­ты 80, 443 (сайт)
  • container_name — имя наше­го контейнера
  • тома — ука­зы­ва­ет тома, кото­рые исполь­зу­ют­ся кон­тей­не­ром. В нашей кон­фи­гу­ра­ции у нас есть общие с нашей систе­мой ката­ло­ги и допол­ни­тель­ный том, кото­рый раз­ре­ша­ет доступ к сре­де Docker из GitLab runner.
  • network — опре­де­ля­ет вир­ту­аль­ную сеть, в кото­рой будут рабо­тать кон­тей­не­ры. В нашем слу­чае пор­тал www и ран­нер рабо­та­ют в одной «gitlab-сети»

external_url - по это­му адре­су будет досту­пен гит­лаб, я став­лю на вир­ту­ал­ке поэто­му будет исполь­зо­вать­ся ip адрес.

стар­ту­ем гитлаб:

docker-compose up -d

 

Для пер­во­го вхо­да в GitLab нужен вре­мен­ный пароль, кото­рый гене­ри­ру­ет­ся авто­ма­ти­че­ски при уста­нов­ке. Полу­ча­ем пароль с помо­щью команды:

docker exec -it gitlab-ce grep 'Password:' /etc/gitlab/initial_root_password

 

Запуск GitLab

Наш GitLab досту­пен по адре­су: http://gitlab.local . После пере­хо­да по это­му адре­су дол­жен появить­ся сле­ду­ю­щий экран:

При­ме­ча­ние . Пер­вый запуск пор­та­ла может занять несколь­ко минут.

Что­бы вой­ти на пор­тал, мы долж­ны вве­сти «root» в поле « Имя поль­зо­ва­те­ля » и вре­мен­ный пароль, кото­рый мы полу­чи­ли ранее, в поле « Пароль » .

После вхо­да в систе­му дол­жен появить­ся сле­ду­ю­щий экран на кото­ром надо нажать turn off:

сни­ма­е­те выде­лен­ную галоч­ку и  сохра­ня­е­те изменения

Сле­ду­ю­щим шагом долж­но быть изме­не­ние паро­ля root. Для это­го перейдите

ука­жи­те ста­рый пароль новый пароль и сохранитесь

вас выки­нет на стра­ни­цу авторизации:

Конфигурация GitLab runner

Что­бы исполь­зо­вать GitLab runner в GitLab, его необ­хо­ди­мо настро­ить. Для кор­рект­ной настрой­ки нам пона­до­бит­ся токен, ско­пи­ро­ван­ный с пор­та­ла. Для это­го перей­ди­те по адре­су: http://gitlab.local/admin/runners и нажми­те кноп­ку Копи­ро­вать токен

На сле­ду­ю­щем шаге он пере­хо­дит в кон­соль и выпол­ня­ет сле­ду­ю­щую команду:

docker exec -it gitlab-runner gitlab-runner register --url "http://gitlab.local" --clone-url "http://gitlab.local"

После запус­ка появит­ся модуль кон­фи­гу­ра­ции. Модуль предо­став­ля­ет сле­ду­ю­щую информацию:

  • Enter the GitLab instance URL : под­твер­ди­те вве­ден­ное зна­че­ние (нажми­те Enter)
  • Enter the registration token : вве­ди­те токен, ско­пи­ро­ван­ный ранее.
  • Enter a description for the runner : вве­ди­те имя бегу­на, напри­мер, docker-runner
  • Enter tags for the runner : оставь­те поле здесь пустым
  • Enter an executor : вве­ди­те докер здесь
  • Enter the default Docker image : здесь мы предо­став­ля­ем образ Docker по умол­ча­нию, напри­мер, maven: последний

После пра­виль­ной настрой­ки мы долж­ны уви­деть под­твер­жде­ние того, что Runner успеш­но заре­ги­стри­ро­ван :

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

sudo vim  gitlab/gitlab/gitlab-runner/config.toml

Затем мы добав­ля­ем новую стро­ку в конец кон­фи­гу­ра­ции ран­не­ра: network_mode = "gitlab-network"  и privileged = true

сохра­ня­ем и пере­за­пус­ка­ем композник:

docker-compose restart

Что­бы про­ве­рить, досту­пен ли бегун на уровне GitLab, перей­ди­те по сле­ду­ю­ще­му адре­су: http://gitlab.local/admin/runners.

Создаем наш первый репозиторий

После настрой­ки бегу­на мы можем создать наш пер­вый репозиторий

Создаем pipeline CI/CD

Что­бы создать CI/CD для про­ек­та, щелк­ни­те глав­ное меню сле­ва, CI/CD , а затем Editor . На экране появит­ся воз­мож­ность создать файл .gitlab-ci.yml, кото­рый будет содер­жать опре­де­ле­ния наше­го пай­плай­на. Этот файл будет создан в репо­зи­то­рии Git.

уда­ля­ем всё что там есть и заки­ды­ва­ет наше:

При­ве­ден­ное выше опре­де­ле­ние опи­сы­ва­ет, как дол­жен рабо­тать про­цесс CI/CD. Наи­бо­лее важ­ны­ми эле­мен­та­ми являются:

  • image : образ доке­ра, кото­рый мы будем исполь­зо­вать для сбор­ки наше­го проекта.
  • stages : спи­сок шагов наше­го процесса
  • build-job : пер­вый шаг в нашем про­цес­се созда­ния наше­го про­ек­та. Кро­ме того, мы сохра­ня­ем арте­фак­ты для исполь­зо­ва­ния на сле­ду­ю­щем шаге.
  • test-job : вто­рой шаг для запус­ка наше­го проекта

Вста­вив наш файл, под­твер­ди­те изме­не­ния, нажав Commit changes .

После утвер­жде­ния GitLab запу­стит про­цесс. Что­бы про­ве­рить его резуль­та­ты, перей­ди­те в CI/CD -> Pipelines в меню сле­ва. На экране мы долж­ны уви­деть, что наша пер­вая зада­ча уже запущена.

когда нуж­но оста­но­вить гит­лаб и ран­нер про­сто используем:

docker-compose down

 

Доба­вим доступ по ssh:

из под рута рабо­тать пло­хо, созда­дим отдель­но­го пользователя:

опять пере­хо­дим к спис­ку пользователей:

захо­дим под нашим пользователем:

нуж­но будет задать новый пароль

как видим пароль успеш­но изменён:

 

тут нуж­но доба­вить наш пуб­лич­ный ключ

[root@centos7 ~]# cat ~/.ssh/id_rsa.pub

всё теперь мож­но пере­хо­дить в про­ект и кло­ни­ро­вать его исполь­зуя наш ключ

 git clone ssh://git@gitlab.local:8822/test/test123.git

 

что­бы мож­но запус­кать в CI docker то исполь­зу­ем сле­ду­ю­щую кон­фи­гу­ра­цию .gitlab-ci.yml обра­ща­ем вни­ма­ние на variables

ВАЖНО - если запус­ка­е­те тесты и вам нуж­но обра­щать­ся к localhost то так рабо­тать не будет, вам нуж­но обра­щать­ся вме­сто localhost - docker

разъ­яс­ня­лось это в этом посте

https://stackoverflow.com/questions/41559660/gitlab-ci-runner-not-able-to-expose-ports-of-nested-docker-containers/48288560#48288560