Невозможно получить токен регистрации gitlab-бегунов из базы данных
Я пытаюсь полностью развернуть мой стек gitlab cicd с помощью ansible и автоматически регистрировать бегунов.
Я использую приведенное ниже задание в своей книге игр, чтобы получить регистрационный токен и сохранить его в фактах для дальнейшей регистрации бегунов, как я видел в нескольких уроках, что мы можем получить регистрационный токен из базы данных gitlab.
Задание "Сборник пьес":
- 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_registration_token не существует в таблице application_settings. Тем не менее runners_registration_token_encrypted
столбец существует, но runners_registration_token_encrypted
возвращаемая строка отклоняется runner-register
апи.
Таким образом, я должен скопировать токен регистрации бегунов из графического интерфейса gitlab (в admin / runners), жестко закодировать его в playbook и снова запустить playbook, чтобы успешно выполнить стек регистрации.
Может кто-нибудь объяснить, где gitlab хранит свой токен регистрации бегунов, отображаемый в графическом интерфейсе (я заметил, что после перезагрузки сервера gitlab он не меняется)? Действительно ли невозможно автоматизировать поиск маркеров регистрации участников gitlab для неинтерактивной автоматической регистрации участников? Ребята, у вас есть идеи о том, как этого добиться?
2 ответа
Может быть, использовать консоль рельсы на сервере приложений? Поместите следующее в оболочку или команду, запустите его на сервере приложений 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 console " \ puts Gitlab::CurrentSettings.current_application_settings.runners_registration_token"'
register: gitlab_runner_registration_token_result
Таким образом, используя Ansible, я могу получить токен регистрации Gitlab runner с моего частного сервера Gitlab и использовать его на хосте 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 }}" \
--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') }}'
Доступна роль https://github.com/dockpack/gitlab_runner.git
Ребята, у вас есть идеи о том, как этого добиться?
Правильный путь - через их API. Очень, очень, очень неразумно позволять кому бы то ни было, включая различные сборники, иметь доступ к базе данных gitlab.
Отдельно, хотя это не особенно важно для вашего конкретного запроса, это очень хорошая привычка, чтобы начать использовать quote
при подаче переменных дзиндзя в строку оболочки