我正在尝试使用Ansible完全部署我的Gitlab CI/CD堆栈,并自动注册Runner。
我在playbook中使用以下任务来获取注册令牌并将其存储在事实中,以供我的Runner进一步注册。正如我在几个教程中看到的那样,我们可以从Gitlab数据库中获取注册令牌。
Ansible playbook任务:
- name: Extract Runner Registration Token directly from Gitlab DB
become: true
become_user: gitlab-psql
vars:
ansible_ssh_pipelining: true
query: "SELECT runners_registration_token FROM application_settings ORDER BY id DESC LIMIT 1"
psql_exec: "/opt/gitlab/embedded/bin/psql"
gitlab_db_name: "gitlabhq_production"
shell: '{{ psql_exec }} -h /var/opt/gitlab/postgresql/ -d {{ gitlab_db_name }} -t -A -c "{{ query }}"'
register: gitlab_runner_registration_token_result
但是这个任务没有返回任何“注册令牌”(得到一个空字符串),因为“application_settings”表中不存在“runners_registration_token”列。然而,“runners_registration_token_encrypted”列存在,但是“runner-register”api拒绝返回的“runners_registration_token_encrypted”字符串。
因此,我必须从gitlab gui(在“admin/runners”中)复制运行者注册令牌,将其硬编码到playbook中,然后再次运行playbook以成功注册stack。
有人能解释一下gitlab存储其在GUI中显示的运行者注册令牌的位置吗(我注意到在重新启动gitlab服务器后它是相同的,不会改变)? 是否完全不可能自动获取gitlab运行者注册令牌以进行非交互式注册? 你们有关于实现这一点的正确方法的任何想法吗?