#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
в хранилище учетных данных.