Ansible lookup env与$and注入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'

在这个项目中,我们将Ansible playbook与GitLab CI一起使用,我们将通过Ansible playbook从ENV_文件传递一些变量,然后用它们呈现JJ2模板

现在,当某个变量的值中有
$
时就会出现问题,该变量在某个点上似乎被解释为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 }}