Как я могу использовать токен развертывания gitlab из ansible?

#git #ansible #gitlab

#git #ansible #gitlab

Вопрос:

У моей компании есть собственный сервер GitLab. Я пишу Ansible playbook, который настраивает сервер, используя несколько проектов с нашего сервера GitLab.

Чтобы целевой сервер автоматически клонировал проекты (неинтерактивно), я использую токены развертывания.

Сначала в веб-интерфейсе нашего сервера GitLab я перешел к своему первому проекту и сгенерировал для него ключ развертывания. Я могу настроить целевой сервер на использование ключа развертывания с помощью ansible примерно так:

 - name: Have git store credentials on disk
  community.general.git_config:
    name: credential.helper
    scope: global
    value: store

- name: Add credentials for project A
  copy:
      dest: /root/.git-credentials
      content: "https://{{ gitlab_project_A_deploy_username }}:{{ gitlab_project_A_deploy_password }}@company_gitlab_server.com"

- name: Clone Project A git repo
  git:
    repo: 'https://company_gitlab_server.com/USER/Project_A.git'
    dest: /some/dir/
  

Я установил gitlab_project_A_deploy_username и gitlab_project_A_deploy_password в хранилище ansible. Это отлично работает, за исключением того /root/.git-credentials , что учетные данные не зависят от git-repo — они зависят от сервера.

Когда я получаю ключ развертывания для проекта B, у него совершенно другое имя пользователя и пароль, но сервер тот же. Даже если я добавлю оба набора учетных данных /root/.git-credentials , модуль git ansible или даже обычный git двоичный файл не будут знать, какие учетные данные использовать при клонировании проекта.

Есть ли способ каким-то образом указать один ключ развертывания для одного проекта и другой ключ развертывания для другого проекта?

Ответ №1:

Почему бы просто не установить учетные данные непосредственно в путь репозитория?

 - name: Clone Project A git repo
  git:
    repo: 'https://{{ gitlab_project_A_deploy_username }}:{{ gitlab_project_A_deploy_password }}@company_gitlab_server.com/USER/Project_A.git'
    dest: /some/dir/
  

Комментарии:

1. Что, если я хочу использовать токен?

Ответ №2:

Если вы хотите использовать помощник для учетных данных (независимо store от того, или cache ), вы можете использовать credential.useHttpPath опцию, чтобы она также совпадала с path.

Затем для помощника хранилища сохраните

 https://{{ gitlab_project_A_deploy_username }}:{{ gitlab_project_A_deploy_password }}@company_gitlab_server.com/USER/Project_A.git
https://{{ gitlab_project_B_deploy_username }}:{{ gitlab_project_B_deploy_password }}@company_gitlab_server.com/USER/Project_B.git
  

в хранилище учетных данных.