Ansible 无法从数据库中获取gitlab runners注册令牌
我正在尝试使用ansible和自动注册运行程序完全部署我的gitlab cicd堆栈 我在playbook中使用下面的任务获取注册令牌并将其存储在facts中,以便我的跑步者进一步注册,正如我在几个教程中看到的那样,我们可以从gitlab数据库获取注册令牌 ansible playbook任务:Ansible 无法从数据库中获取gitlab runners注册令牌,ansible,gitlab,gitlab-ci,gitlab-ci-runner,gitlab-omnibus,Ansible,Gitlab,Gitlab Ci,Gitlab Ci Runner,Gitlab Omnibus,我正在尝试使用ansible和自动注册运行程序完全部署我的gitlab cicd堆栈 我在playbook中使用下面的任务获取注册令牌并将其存储在facts中,以便我的跑步者进一步注册,正如我在几个教程中看到的那样,我们可以从gitlab数据库获取注册令牌 ansible playbook任务: - name: Extract Runner Registration Token directly from Gitlab DB become: true become_user: g
- 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
但是此任务不会返回任何注册令牌(获取空字符串),因为runners\u registration\u token列在application\u settings表中不存在。但是,runners\u registration\u token\u encrypted
列存在,但是runners\u registration\u token\u encrypted
api拒绝返回的string
因此,我必须从gitlab gui(在admin/runners中)复制runners注册令牌,将其硬编码到playbook中,然后再次运行playbook以成功注册堆栈
有人能解释一下gitlab在GUI中显示的runners注册令牌的存储位置吗(我注意到它在重新启动gitlab服务器后是相同的,它没有改变)?
是否完全不可能为自动跑步者非交互式注册自动执行gitlab跑步者注册令牌检索?
请问,你们对实现这一目标的正确方法有什么想法吗
请问,你们对实现这一目标的正确方法有什么想法吗
正确的方法是通过。允许任何人(包括ansible剧本)访问gitlab数据库是非常非常非常不明智的
另外,虽然与您的特定查询不太相关,但在将jinja变量输入shell字符串时使用它是一个非常好的习惯是否可以使用应用程序服务器上的rails控制台?
将以下内容放入shell或命令中,在gitlab应用程序服务器上运行并捕获输出:
gitlab-rails runner -e production "puts Gitlab::CurrentSettings.current_application_settings.runners_registration_token"
所以对于Ansible这样的东西:
- name: Extract Runner Registration Token directly from Gitlab Rails console
become: true
shell: 'gitlab-rails runner -e production "puts Gitlab::CurrentSettings.current_application_settings.runners_registration_token"'
register: gitlab_runner_registration_token_result
通过使用Ansible,我可以从我的私有Gitlab服务器获得Gitlab runner注册令牌,并在runner主机上使用它自动注册docker runner:
- name: obtain registration token
when: gitlab_host is defined
delegate_to: "{{ gitlab_host }}"
command: 'gitlab-rails runner -e production "puts Gitlab::CurrentSettings.current_application_settings.runners_registration_token"'
register: runners_registration_token
changed_when: false
- name: set gitlab_runner_token
when: gitlab_host is defined and runners_registration_token.rc == 0
set_fact:
gitlab_runner_token: "{{ runners_registration_token.stdout }}"
- name: register docker runner
when: docker_runner|bool
command: |
gitlab-ci-multi-runner register \
--non-interactive \
--url "{{ gitlab_external_url }}" \
--registration-token "{{ gitlab_runner_token|quote }}" \
--description "docker-runner" \
--executor "docker" \
--docker-network-mode="host" \
--docker-tlsverify=false \
--docker-privileged \
--tag-list '{{ gitlab_runner_tags | join(",") }}' \
--docker-image='{{ gitlab_runner_image |default('alpine') }}'
您可以使用角色Thx@Matthew获得答案,但无法通过API检索注册令牌。文档要求您从gitlab GUI获取令牌,并使用它注册跑步者。。。你不能通过API来实现这一点。GitLab Comunity Edition中有一个2年前的问题提到了这一点-关于quote filter,但请注意命令模块,在命令足够时不使用shell也是一种最佳做法。在版本“13.0”中删除了令牌请参阅链接文档中的注释。