Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Как развернуть GitLab runner с Docker executor, используя DebOps?

Хочу развернуть GitLab runner с Docker Executor, используя роли и скрипты от DebOps. Документация говорит, что Docker executor поддерживается. Пока что у меня получается только Shell executor. Ниже подробности.
Проект инициализировал с помощью debops-init. Из документации я сделал вывод, что я должен сам включить роль для Docker:
To use different executors like SSH or Docker, you need to provide additional configuration and ensure that required software (ssh, Docker, Docker Machine, etc.) is installed if required.
Получились такие конфиги:
ansible/inventory/hosts
[debops_all_hosts] myhost.domain.tdl ansible_ssh_host=10.11.11.11
# чтобы был докер [debops_service_docker] myhost.domain.tdl
[debops_service_gitlab_runner] myhost.domain.tdl
ansible/inventory/group_vars/all/all.yml
gitlab_runner__api_url: 'http://gitlab.domain.tld/ci' gitlab_runner__executor: 'docker'
Выполнил следующее:
# настройка авторизации debops bootstrap -u root --ask-pass # базовая конфигурация и докер debops
# потом раскомментировал в инвентаре [debops_service_gitlab_runner] GITLAB_RUNNER_TOKEN=mytokenhere debops service/gitlab_runner
В результате в GitLab появился подключенный раннер с Shell executor. Он работает, в логах сборки вижу "Using Shell executor...".
Но я-то хочу Docker executor. Как его получить? Возможные причины:
Не установил какую-то из нужных зависимостей. Это вообще странно с ansible и DebOps, где все зависимости обычно разрешаются автоматически. Неверные значения или не хватает каких-то переменных

UPD: посмотрел в конфиги на хосте. В /etc/gitlab-runner/config.toml вижу следующее:
concurrent = 1
[[runners]] name = "myhost.domain.tdl" url = "http://gitlab.domain.tld/ci" token = "mytokenhere" executor = "shell" [runners.docker] image = "debian" privileged = false disable_cache = false cap_drop = [ "NET_ADMIN", "SYS_ADMIN", "DAC_OVERRIDE" ]
Почему executor = "shell"?


Ответ

В роли есть такие переменные:
List of default GitLab Runner instances.
gitlab_runner__default_instances: [ '{{ gitlab_runner__instance_shell }}' ]
The default GitLab Runner instance.
gitlab_runner__instance_shell: name: '{{ gitlab_runner__fqdn }}' executor: 'shell'
Роль уcтроена таким образом, что gitlab_runner__executor имеет значение только, если не указан executor у конкретного runner'а.
Список runner'ов для конфига берется так:
for runner in (gitlab_runner__default_instances + gitlab_runner__instances + gitlab_runner__group_instances + gitlab_runner__host_instances)
Т.е. чтобы добиться эффекта, нужно, к примеру, переопределить:
gitlab_runner__default_instances: - name: '{{ gitlab_runner__fqdn }}'
и не указывать executor и тогда будет использован gitlab_runner__executor, либо явно указать:
gitlab_runner__default_instances: - name: '{{ gitlab_runner__fqdn }}' executor: docker
P.S. я это не тестировал – ответ написал, глядя в документацию и код.

Комментариев нет:

Отправить комментарий