Ansible lookup env与$and注入jj2模板不起作用
在这个项目中,我们将Ansible playbook与GitLab CI一起使用,我们将通过Ansible playbook从ENV_文件传递一些变量,然后用它们呈现JJ2模板 现在,当某个变量的值中有Ansible lookup env与$and注入jj2模板不起作用,ansible,devops,gitlab-ci,Ansible,Devops,Gitlab Ci,在这个项目中,我们将Ansible playbook与GitLab CI一起使用,我们将通过Ansible playbook从ENV_文件传递一些变量,然后用它们呈现JJ2模板 现在,当某个变量的值中有$时就会出现问题,该变量在某个点上似乎被解释为shell变量,并且最终值被渲染为不正确 例如,在ENV_文件中 (通过GitLab CI设置>CI/CD>变量菜单设置): docker-compose.yaml中的最终结果变成123@xyz 编辑:我们刚刚尝试更改为导出一些\u VAR='123'
$
时就会出现问题,该变量在某个点上似乎被解释为shell变量,并且最终值被渲染为不正确
例如,在ENV_文件中
(通过GitLab CI设置>CI/CD>变量菜单设置):
docker-compose.yaml中的最终结果变成123@xyz
编辑:我们刚刚尝试更改为导出一些\u VAR='123'''$''abc@xyz“
,最终结果变为123abc@xyz
,仍然缺少$
gitlab-ci.yaml
部署:
阶段:部署
环境:
姓名:戴夫
脚本:
-源$ENV_文件
-cd ansible&&ansible playbook-i inventory/dev.ini runapp.yaml--vault密码文件=${ansible\u vault\u file}
runapp.yaml
-主机:应用程序
变成:是的
角色:
-{角色:某些应用程序}
变量:
SOME_-VAR:“{{lookup('env','SOME_-VAR')}”
任务文件:
-name:“模板化docker编写文件”
变成:是的
模板:
src:app-docker-compose.yaml.j2
dest:/opt/someapp/docker-compose.yaml
app-docker-compose.yaml.j2
有什么提示吗?
谢谢 设置包含
$
;;的CI/CD变量时,我可以重现该行为,尽管文档的编写方式似乎只有在.gitlab ci.yml
中设置变量时才会出现问题,但这显然是错误的
如果您希望CI/CD变量包含一个文本
$
,它需要加倍,因此一些变量将需要写成123$$abc@xyz
以使其具体化为123$abc@xyz
管道内部(尽管正如评论正确指出的那样,人们在使用source
时要格外小心,以避免进一步的插值)该问题与ansible或gitlab ci无关。这是一个纯shell变量定义问题。只需在env文件中用简单的引号正确引用您的值即可。SOME\u var=123$abc@xyz;echo$SOME_VAR
=>123@xyz(除非您定义了变量abc
).SOME_VAR='123$abc@xyz“;echo$SOME_VAR
=>123$abc@xyz@Zeitounator我们已经在GitLab CI/CD Vars ENV_文件中引用了它:export SOME_VAR='123$abc@xyz“
也许我应该尝试回显管道中的var。请注意,您没有提供ENV_文件
,并且您的示例var赋值没有使用export
和没有引用。您应该更新您的问题。我无法重现您的问题:
export FIRST_VAR=...
export SOME_VAR='123$abc@xyz'
export SOME_OTHER_VAR=...
someapp-svc:
image: someapp:version
restart: always
ports:
- ####:####
environment:
SOME_VAR: {{ SOME_VAR }}