我正在尝试使用Gitlab CI和Ansible实现“无密码”部署工作流程。 有些步骤需要密码(我已经尽可能使用SSH密钥)所以我将这些密码存储在Ansible Vault中。接下来,我只需要在运行playbook时提供Vault密码。
但我怎么能很好地与Gitlab CI整合呢?
我可以注册一个gitlab-ci作业(或者作业只适合构建吗?),它只运行提供保险库密码的剧本?!这可以在没有密码的情况下实现吗?!
另外,如果有人可以向我指出一些显示我们如何使用Ansible部署构建的材料,我会非常高兴。你可以注意到,我对这一点一无所知。
答案 0 :(得分:3)
您可以在GitLab CI中设置一个环境变量,该变量将包含Ansible Vault密码。在我的例子中,我称之为$ANSIBLE_VAULT_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
希望这个技巧可以帮助你。
答案 1 :(得分:1)
我对gitlab ci或者ansible vault并不是很熟悉,但我喜欢这种情况的一种策略是创建一个单独的,隔离的,安全的,耐用的地方,你的密码或其他秘密存在。例如,私人s3桶。然后,为您的构建框或构建集群提供对该安全位置的显式访问权限。当然,您还要确保您的构建框或群集也被锁定,例如在不可公开访问的vpc中,并且只能通过vpn或其他非常安全的方式访问。< / p>
我们的想法是让需要您密码的机器明确知道从何处获取密码并单独获得许可。访问他们需要得到它。前者不一定是秘密(所以它可以存在于源代码控制中),但后者实际上是不可能在不损害整个系统的情况下实现的,此时你还是已经被剔除了。
因此,更具体地说,运行ansible的机器可能位于安全集群内。它知道如何访问密码。它有权这样做。因此,它可以简单地获取pw,作为变量存储,并在运行时使用它来访问安全资源。您将要小心不要在此过程中泄漏密码(例如将带有pw的ansible日志传送到群集外的某个位置,甚至可能在任何地方)。如果你想从群集外部启动ansible脚本,那么你将vpn在远程机器上运行ansible playbook。