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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
version: '3.7' services: web: image: 'gitlab/gitlab-ce:latest' restart: always hostname: 'gitlab.local' container_name: gitlab-ce environment: DOCKER_OPTS: "--insecure-registry registry.gitlab.local:5005" GITLAB_OMNIBUS_CONFIG: | registry_external_url 'http://registry.gitlab.local:5005' gitlab_rails['registry_enabled'] = true gitlab_rails['registry_host'] = "registry.gitlab.local" gitlab_rails['registry_port'] = "5005" gitlab_rails['registry_path'] = "/var/opt/gitlab/gitlab-rails/shared/registry" gitlab_rails['registry_api_url'] = "http://localhost:5000" gitlab_rails['gitlab_shell_ssh_port'] = 8822 registry['enable'] = true registry['token_realm'] = "http://gitlab.local:80" registry['registry_http_addr'] = "localhost:5000" ports: - '80:80' - '443:443' - '8822:22' - '5005:5005' - '5000:5000' - '2375:2375' deploy: resources: limits: cpus: '4.0' memory: 6000M reservations: cpus: '4.0' memory: 5000M volumes: - './gitlab/gitlab/config:/etc/gitlab' - './gitlab/gitlab/logs:/var/log/gitlab' - './gitlab/gitlab/data:/var/opt/gitlab' - '/etc/hosts:/etc/hosts:ro' networks: - gitlab gitlab-runner: image: gitlab/gitlab-runner:alpine container_name: gitlab-runner restart: always environment: - DOCKER_OPTS="--insecure-registry registry.gitlab.local:5005" depends_on: - web deploy: resources: limits: cpus: '1.0' memory: 200M reservations: cpus: '1.0' memory: 200M volumes: - /var/run/docker.sock:/var/run/docker.sock - './gitlab/gitlab/gitlab-runner:/etc/gitlab-runner' - '/etc/hosts:/etc/hosts:ro' networks: - gitlab networks: gitlab: name: gitlab-network |
Эта конфигурация определяет, какие контейнеры мы хотим запустить. В нашем случае это будет сервис GitLab с одним GitLab runner (отдельным модулем для запуска задач CI/CD). Наиболее важными параметрами конфигурации являются:
- image — образ докера, который мы хотим использовать на нашем сервере
- порты — список портов, которые мы делаем доступными вне контейнера. В нашей конфигурации мы предоставляем порты 80, 443 (сайт)
- container_name — имя нашего контейнера
- тома — указывает тома, которые используются контейнером. В нашей конфигурации у нас есть общие с нашей системой каталоги и дополнительный том, который разрешает доступ к среде Docker из GitLab runner.
- network — определяет виртуальную сеть, в которой будут работать контейнеры. В нашем случае портал www и раннер работают в одной «gitlab-сети»
external_url - по этому адресу будет доступен гитлаб, я ставлю на виртуалке поэтому будет использоваться ip адрес.
стартуем гитлаб:
docker-compose up -d
1 2 3 4 5 |
[root@centos7 ~]# docker-compose up -d [+] Running 2/2 ⠿ Container gitlab-ce Started 0.6s ⠿ Container gitlab-runner Started 2.0s |
Для первого входа в GitLab нужен временный пароль, который генерируется автоматически при установке. Получаем пароль с помощью команды:
docker exec -it gitlab-ce grep 'Password:' /etc/gitlab/initial_root_password
1 2 3 |
[root@centos7 ~]# docker exec -it gitlab-ce grep 'Password:' /etc/gitlab/initial_root_password Password: WshpUwQU8TYl2Mf6BejA8/TvmA5O4v8zsH+enDViO/s= |
Запуск 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 успешно зарегистрирован :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@centos7 ~]# docker exec -it gitlab-runner gitlab-runner register --url "http://gitlab.local" --clone-url "http://gitlab.local" Runtime platform arch=amd64 os=linux pid=17 revision=f761588f version=14.10.1 Running in system-mode. Enter the GitLab instance URL (for example, https://gitlab.com/): [http://gitlab.local]: Enter the registration token: 1NsXK9fXjFqW8QWzb7FK Enter a description for the runner: [4d74bdb145b8]: docker-runner Enter tags for the runner (comma-separated): docker Enter optional maintenance note for the runner: Registering runner... succeeded runner=1NsXK9fX Enter an executor: docker-ssh, shell, ssh, virtualbox, kubernetes, custom, docker, parallels, docker+machine, docker-ssh+machine: docker Enter the default Docker image (for example, ruby:2.7): docker:20.10.16 Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! |
Помимо базовой настройки, нам также необходимо разрешить контейнерам, запускаемым из раннера, доступ в виртуальную сеть, в которой работает GitLab. Для этого запускаем редактор (например vi)
sudo vim gitlab/gitlab/gitlab-runner/config.toml
Затем мы добавляем новую строку в конец конфигурации раннера: network_mode = "gitlab-network" и privileged = true
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
concurrent = 1 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "docker-tag" url = "http://gitlab.local" token = "yzypjxSsimAGUJ1BbZk3" executor = "docker" clone_url = "http://gitlab.local" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure] [runners.docker] tls_verify = false image = "docker:20.10.16" privileged = true disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache"] shm_size = 0 network_mode = "gitlab-network" |
сохраняем и перезапускаем композник:
docker-compose restart
Чтобы проверить, доступен ли бегун на уровне GitLab, перейдите по следующему адресу: http://gitlab.local/admin/runners.
Создаем наш первый репозиторий
После настройки бегуна мы можем создать наш первый репозиторий
Создаем pipeline CI/CD
Чтобы создать CI/CD для проекта, щелкните главное меню слева, CI/CD , а затем Editor . На экране появится возможность создать файл .gitlab-ci.yml, который будет содержать определения нашего пайплайна. Этот файл будет создан в репозитории Git.
удаляем всё что там есть и закидывает наше:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
image: maven:latest stages: - build - test build-job: stage: build script: - echo "TEST build" tags: - docker test-job: stage: test dependencies: - build-job script: - ls -al - echo "Running tests" tags: - docker |
Приведенное выше определение описывает, как должен работать процесс 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
1 2 3 |
[root@centos7 ~]# cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHvRuxF3Pg0s8HxIVQYSjA+wqEfjPAHCzVUYSpoZQ6Cg7hUyYaMR5le29hx8dedVslk74hb08h24A4tEqnfyw6W1ikMeE/nEs5SVzgk0hJy4JdLZH0J8h7zaSxac0KibZVDW3RmE8XHxQCSxTKGhCxXUvy+vZcDjzwHiC3I8bcYN50g3Fgf7gvI8Y6lsl0VcJ0evKuN7kKU3LHkEFcyrE4Mnh1eBnNSwalBmjuSK/ws1CFISSeHrfXU2R4gQrWn/z7NCxyYEiMA8ugADwoYxMt7pNvQLQEkvh/ESSfRqf2TAoQ8FDGtJwN2xQk6ixqpL/JlzGx4pBKgBFNoI64RdcJ root@centos7 |
всё теперь можно переходить в проект и клонировать его используя наш ключ
git clone ssh://git@gitlab.local:8822/test/test123.git
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@centos7 ~]# git clone ssh://git@gitlab.local:8822/test/test123.git Cloning into 'test123'... The authenticity of host '[192.168.1.170]:8822 ([192.168.1.170]:8822)' can't be established. ECDSA key fingerprint is SHA256:sIqRdPA5vWPeTYeShL1y069Q33OKzt5eHkiBPDtfXu0. ECDSA key fingerprint is MD5:42:ae:b0:e5:bc:89:2e:2f:28:70:2b:ec:f0:34:19:60. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[192.168.1.170]:8822' (ECDSA) to the list of known hosts. remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done. |
чтобы можно запускать в CI docker то используем следующую конфигурацию .gitlab-ci.yml обращаем внимание на variables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
variables: # By default, the helper image is pulled from Docker Hub. Use gitlab docker regestry instead of dockerhub FF_GITLAB_REGISTRY_HELPER_IMAGE: 1 DOCKER_HOST: tcp://docker:2375 DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" DOCKER_BUILDKIT: 1 COMPOSE_DOCKER_CLI_BUILD: 1 DOCKER_CONTAINER_REGISTRY: registry.gitlab.local:5005 DOCKER_REGISTRY: $DOCKER_CONTAINER_REGISTRY/test/backend stages: - build test: stage: build image: docker:20.10.2 services: - name: docker:dind alias: docker entrypoint: ["dockerd-entrypoint.sh", "--tls=false", "--insecure-registry=registry.gitlab.local:5005"] before_script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY_IMAGE # enable apk cache - mkdir -p $CI_PROJECT_DIR/.cache/apk - ln -s $CI_PROJECT_DIR/.cache/apk /etc/apk/cache # docker:20.10.2 image based on alpine 3.12, but we need newer version of docker-compose - echo 'http://dl-cdn.alpinelinux.org/alpine/v3.13/community' >> /etc/apk/repositories # install stage dependencies - apk add docker-compose script: - docker ps - docker pull nginx - docker images - docker-compose -v - docker tag nginx $DOCKER_REGISTRY/nginx:test - docker images - docker push $DOCKER_REGISTRY/nginx:test only: - main tags: - docker-tag |
ВАЖНО - если запускаете тесты и вам нужно обращаться к localhost то так работать не будет, вам нужно обращаться вместо localhost - docker
разъяснялось это в этом посте
https://stackoverflow.com/questions/41559660/gitlab-ci-runner-not-able-to-expose-ports-of-nested-docker-containers/48288560#48288560