在像Gitlab-ce这样的私有CI和源代码控制存储库上,可以将〜/ .vault_pass.txt复制到服务器,并由CI使用它使用Ansible解密文件。 br />
问题
在像Bitbucket这样的公共CI和源代码控制存储库上,无法将〜/ .vault_pass.txt复制到自己的CI服务器中。
讨论
在Bitbucket中可以定义加密的变量,但是当检查该文件时,唯一与VAULT相关的变量是:
ANSIBLE_ASK_VAULT_PASS
ANSIBLE_VAULT_PASSWORD_FILE
这些变量不是解决问题的选项,因为设置
ANSIBLE_ASK_VAULT_PASS
时ansible-vault
仍然提示:user@host $
Vault password:
输入相同的密码可以打开加密的文件,但是目的是在不需要文件的情况下打开文件或在提示符下输入密码。
解决该问题的另一种尝试是运行
export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>
,交互模式仍然存在。< br另一个选项是
export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt
,但是此文件需要被推送到存储库中,但是源代码控制存储库中不应包含密码。#1 楼
--vault-password-file
可以改为指向写入stdout的可执行脚本。这个鲜为人知的功能应该可以解决您的问题。首先,编写一个简单的可执行脚本来打印系统环境变量,然后将其检查到源代码控件中。然后,使用Bitbucket的加密变量功能将该环境变量设置为您的ansible-Vault机密。最后,像这样执行:
ansible-playbook site.yml --vault-password-file ./mypass.sh
。参考文献:
http://docs.ansible.com/ansible/ playbooks_vault.html#running-a-playbook-with-vault
https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto
评论
然后mypass.sh将包含回显$ VAR例如,该变量将在BitBucket UI中设置吗?
– 030
17 Mar 31 '17在7:26
对!另外,这是一个Python示例:stackoverflow.com/questions/4906977/…
–林地猎人
17年3月31日在17:18
([Errno 8] Exec格式错误)。如果这不是脚本,请从文件中删除可执行文件位。
– 030
17年4月10日在9:05
#2 楼
使用ansible-playbook site.yml --vault-password-file ./mypass.sh
导致:
ERROR! Problem running vault password script / p a t h / t o
/ e c h o _ v a u l t _ p a s s . s h ([Errno 8] Exec format error). If this is
not a script, remove the executable bit from the file.
基于此帖子,以下内容在位桶管道中定义:
image: docker:latest
pipelines:
default:
- step:
script:
- echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt
- ansible-playbook -i ansible/inventory ansible/site.yml --vault-password-file .vault_password.txt
#3 楼
您可能有一个不运行生产环境的测试设置,并为此加载了不同的文件。创建仅适用于本地测试安装的host_vars / localhost / vault。
这样,您可以使用仅适用于该本地主机保管库的开放保管库密码。
评论
嗨,@ 030,您能澄清一下CI的意思吗?对我来说,这意味着持续集成,但是GitLab和BitBucket也是源代码管理存储库-如果扩展CI,问题将会更加清楚。