我是 AnsibleVault 的新手,所以这里是:
作为我公司 CI/CD 流程的一部分,我们使用 Jenkins 将我们的应用程序部署到我们的各种服务器上;已经有一个 Ansible 剧本可以做到这一点并且效果很好。请注意,我根本无法更改这部分。如果我在源代码中加密一个文件并将其部署在这里,那么之后它就不会被解密。 由于我们的应用程序的配置文件中包含敏感信息(例如数据库用户名和密码),我需要从源代码中取出这些信息,并通过 AnsibleVault 对其进行加密。一切都表明我应该使用“复制”命令:
到目前为止我已经尝试过:
通过 ansible-vault encrypt_string 对整个配置文件进行编码,并将结果输出放入一个单独的文件中,作为 Jenkins 项目的一部分。假设它被称为“config.properties.encoded”
在 ansible 剧本(copy_secure_files.yaml)中我有:
- hosts: remote_servers tasks: - name: Copy files to remote copy: src: 'config.properties.encoded' dest: 'config.properties' decrypt: yes
根据文档: 复制模块将文件从本地或远程计算机复制到远程计算机上的某个位置。 除了当我运行它时,它所做的只是将文件复制到 jenkins 构建服务器上。它没有上传到任何地方。而且它没有被解密。
dev.ini:
[remote_servers] dev ansible_host=remoteDevServer ansible_user=devUser anisble_connection=local
jenkinsfile-deploy
ansiblePlaybook(
installation: 'Ansible 2',
inventory: 'dev.ini',
playbook: "Copy_secure_files.yaml",
colorized: true,
vaultCredentialsId: '<Password used to encrypt file goes here>'
extraVars: [
ansible_user: ansible_user,
ansible_password: ansible_password
]
)
我做错了什么?为什么我的文件没有上传到任何地方?
您在库存中使用
ansible_connection=local
,所以是的,Ansible 不会从您的 Ansible 控制机(在您的情况下为 Jenkins)
您需要考虑到,您通常会依赖清单定义中的第一个参数是实际主机名(可通过 DNS 或 /etc/hosts 解析或存在于 SSH 配置中...)这一事实,在您的混淆示例中,即
dev
或者您使用 ansible_host
并输入实际的主机名或 IP 地址