我正在尝试使用Gitlab CI和Ansible实现"无密码"部署工作流程.有些步骤需要密码(我已经尽可能使用SSH密钥)所以我将这些密码存储在Ansible Vault中.接下来,我只需要在运行playbook时提供Vault密码.
但是我怎么能很好地与Gitlab CI集成呢?
我可以注册一个gitlab-ci工作(或者工作只适用于构建吗?),它只是以某种方式运行提供保险库密码的剧本?!如果没有密码以纯文本形式存在,这可以实现吗?!
另外,如果有人可以向我指出一些显示我们如何使用Ansible部署构建的材料,我会非常高兴.你可以注意到,我确实没有发现任何相关信息.
您可以在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
Run Code Online (Sandbox Code Playgroud)
希望这个技巧可以帮助您。
我对 gitlab ci 或 ansibleVault 不太熟悉,但对于这种情况,我更喜欢的一种策略是创建一个单独的、隔离的、安全的、持久的地方来存放你的密码或其他秘密。例如,私有 s3 存储桶。然后,让您的构建框或构建集群显式访问该安全位置。当然,您随后需要确保您的构建盒或集群也被锁定,例如在不可公开访问且只能通过 VPN 或其他非常安全的方式访问的 vpc 内。
这个想法是让需要密码的机器明确知道从哪里获取密码,以及获取密码所需的权限和访问权限。前者不一定是秘密(因此它可以存在于源代码控制中),但后者在不损害整个系统的情况下几乎不可能实现,此时您已经被困住了。
因此,更具体地说,运行 ansible 的机器可能位于安全集群内。它知道如何访问密码。它已获得这样做的许可。因此,它可以简单地获取密码,存储为变量,并在运行时使用它来访问安全资源。您需要小心,不要在此过程中泄漏密码(例如将带有密码的ansible日志传输到集群外部的某个地方,甚至可能是任何地方)。如果您想从集群外部启动 ansible 脚本,那么您可以通过 VPN 在远程计算机上运行 ansible playbook。