Невозможно получить токен регистрации gitlab-бегунов из базы данных - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь полностью развернуть свой стек gitlab cicd с помощью ansible и автоматически зарегистрировать бегунов.

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

Но эта задача не возвращает регистрациитокен (получить пустую строку), поскольку столбец runners_registration_token не существует в таблице application_settings .Однако столбец runners_registration_token_encrypted существует, но возвращенная строка runners_registration_token_encrypted отклоняется runner-register api.

Таким образом, я должен скопировать токен регистрации бегунов из графического интерфейса gitlab (в admin / runners ), жестко закодировать его в playbook и снова запустить playbook для успешного завершения стека регистрации.

Может кто-нибудь объяснить, где gitlab хранит свой токен регистрации бегунов, отображаемый в графическом интерфейсе (я заметил, что после перезагрузки сервера gitlab он не меняется)?Действительно ли невозможно автоматизировать поиск маркеров регистрации участников gitlab для неинтерактивной автоматической регистрации участников?Ребята, у вас есть идеи о том, как этого добиться?

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Может быть, использовать консоль rails на сервере приложений?Поместите следующее в оболочку или команду, запустите его на сервере приложений 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
0 голосов
/ 18 августа 2019

Таким образом, используя Ansible, я могу получить токен регистрации бегуна Gitlab с моего частного сервера Gitlab и использовать его на хосте бегуна для автоматической регистрации бегуна:

- 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') }}'

Роль доступна dockpack.gitlab_runner

0 голосов
/ 29 декабря 2018

Ребята, вы не знаете, как правильно этого добиться?

Правильный путь - через их API .Очень, очень, очень неразумно разрешать кому бы то ни было - включая различные сборники игр - иметь доступ к базе данных gitlab.

Отдельно, хотя это не особенно важно для вашего конкретного запроса, это очень хорошая привычканачать использовать quote при подаче переменных jinja в строку оболочки

...