简介

在像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_PASSansible-vault仍然提示:

user@host $
Vault password:


输入相同的密码可以打开加密的文件,但是目的是在不需要文件的情况下打开文件或在提示符下输入密码。

解决该问题的另一种尝试是运行export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>,交互模式仍然存在。
< br另一个选项是export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt,但是此文件需要被推送到存储库中,但是源代码控制存储库中不应包含密码。

评论

嗨,@ 030,您能澄清一下CI的意思吗?对我来说,这意味着持续集成,但是GitLab和BitBucket也是源代码管理存储库-如果扩展CI,问题将会更加清楚。

#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。

这样,您可以使用仅适用于该本地主机保管库的开放保管库密码。