我想使用DebOps角色和脚本部署GitLab runner和Docker Executor。文档说Docker executor is supported。到目前为止,我只得到 Shell executor。以下是详细信息。
项目初始化为debops-init. 从文档中,我得出结论,我应该自己启用 Docker 的角色:
要使用 SSH 或 Docker 等不同的执行器,您需要提供额外的配置,并确保在需要时安装所需的软件(ssh、Docker、Docker Machine 等)。
我们得到了以下配置:
ansible/库存/主机:
[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/库存/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 中出现了一个 connected runner with Shell executor。它有效,在构建日志中我看到“使用 Shell 执行程序 ...”。
但我想要 Docker 执行器。如何获得?可能的原因:
- 没有安装任何必需的依赖项。这在 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"?
该角色包含以下变量:
该角色的设计方式使其仅在未针对特定“a”
gitlab_runner__executor指定时才重要。executorrunner配置的 列表
runner如下所示:那些。为了达到这个效果,你需要,例如,重新定义:
并且不指定
executor然后它将被使用gitlab_runner__executor,或者明确指定:PS 我没有对此进行测试 - 我写了答案,查看了文档和代码。