如何从Ansible使用gitlab部署令牌?

时间:2020-11-02 23:15:38

标签: git ansible gitlab

我的公司有一个自托管的GitLab服务器。 我正在写一本Ansible剧本,通过使用我们GitLab服务器上的多个项目来配置服务器。

为了使目标服务器自动(非交互式)克隆项目,我使用了部署令牌。

首先,在GitLab服务器的Web界面上,我转到了第一个项目并为其生成了部署密钥。我可以使用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/

我在ansible保管库中设置了gitlab_project_A_deploy_usernamegitlab_project_A_deploy_password。效果很好,除了在/root/.git-credentials中,凭据不是特定于git-repo的-它们是特定于服务器的。

当我获得Project B的部署密钥时,它具有完全不同的用户名和密码,但是服务器是相同的。即使我将两组凭据都添加到/root/.git-credentialsgit ansible模块,甚至只是常规的git二进制文件,都不知道克隆项目时要使用哪个凭据。

是否可以通过某种方式为一个项目指定一个部署密钥,为另一个项目指定不同的部署密钥?

2 个答案:

答案 0 :(得分: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 :(得分:1)

如果您想使用帮助程序作为凭据(无论是store还是cache),也可以使用credential.useHttpPath选项使其与路径匹配。

然后,为商店助手保存

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

在凭据存储区中。