使用Gitlab CI中的Ansible进行部署,处理密码

使用Gitlab CI中的Ansible进行部署,处理密码,ansible,gitlab-ci,Ansible,Gitlab Ci,我正在尝试使用Gitlab CI和Ansible实现“无密码”部署工作流。 有些步骤确实需要密码(我已经在尽可能地使用SSH密钥),所以我将这些密码存储在一个数据库中。接下来,我只需要在运行playbook时提供Vault密码 但如何将其与Gitlab CI很好地集成? 我可以注册一个gitlab ci作业(或者作业只适用于构建吗?),它只是运行playbook,以某种方式提供vault密码?!这能在没有明文密码的情况下实现吗 另外,如果有人能告诉我一些资料,说明如何使用Ansible部署构建,

我正在尝试使用Gitlab CI和Ansible实现“无密码”部署工作流。 有些步骤确实需要密码(我已经在尽可能地使用SSH密钥),所以我将这些密码存储在一个数据库中。接下来,我只需要在运行playbook时提供Vault密码

但如何将其与Gitlab CI很好地集成?

我可以注册一个gitlab ci作业(或者作业只适用于构建吗?),它只是运行playbook,以某种方式提供vault密码?!这能在没有明文密码的情况下实现吗


另外,如果有人能告诉我一些资料,说明如何使用Ansible部署构建,我会非常高兴。正如您所注意到的,我肯定对此一无所知。

我对gitlab ci或ansible vault不太熟悉,但在这种情况下,我更喜欢的一种策略是创建一个单独的、隔离的、安全的、持久的地方来存放您的密码或其他机密。例如,一个私有的s3存储桶。然后,为构建框或构建集群提供对该安全位置的显式访问。当然,您还需要确保您的构建箱或集群也被锁定,例如在一个不可公开访问且只能通过vpn或其他非常安全的方式访问的vpc内

这样做的目的是让需要你的密码的机器明确知道从哪里获取密码,并分别提供获取密码所需的权限和访问权限。前者不一定是秘密(因此它可以存在于源代码管理中),但后者几乎不可能在不损害整个系统的情况下实现,在这一点上,您已经被束缚了


因此,更具体地说,运行ansible的机器可能位于安全集群内。它知道如何访问密码。它有权这样做。因此,它可以简单地获取pw,作为变量存储,并在运行时使用它访问安全资源。在这个过程中,您需要小心不要泄露密码(比如用pw将ansible日志传送到集群之外的某个地方,甚至可能是任何地方)。如果要从群集中外部启动ansible脚本,则需要在远程计算机上运行ansible playbook。

您可以在GitLab CI中设置一个环境变量,该变量将保存ansible Vault密码。在我的例子中,我称之为
$ANSIBLE\u VAULT\u PASSWORD

下面是.gitlab-ci.yml的示例:

deploy:
  only:
    - master
  script:
    - echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt
    - ansible-playbook -i ansible/staging.yml --vault-password-file .vault_password.txt

希望这个技巧能帮助您。

这是一个自托管gitlab跑步者吗?如果是这样,只需使用gitlab runner用户的ssh密钥(或设置它们)即可。我喜欢这个答案,但使用环境变量和CI中的值是否也一样?如果出于保护的考虑,我们最终会得到纯文本的密码还是没有?