Невозможно получить токен регистрации 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 при подаче переменных дзиндзя в строку оболочки

Другие вопросы по тегам