GitLab CI中通过tower-cli传递extra vars至Ansible Tower失败求助
GitLab Pipeline中用tower-cli传递extra vars到Ansible Tower的正确语法
问题根源
你之前的两种写法错误原因:
tower-cli不支持Ansible的Jinja2模板语法(比如{{ lookup('env', 'APP_VER') }}),这个语法仅能在Ansible Playbook中使用,tower-cli的-e参数只接受纯key=value字符串或JSON格式字符串。- 用
-e "version=$APP_VER"报错,大概率是$APP_VER的值包含特殊字符(空格、引号等),或是shell引号处理逻辑导致tower-cli解析失败。
正确写法
1. 优先使用JSON格式(推荐,避免特殊字符问题)
用JSON结构包裹变量,通过shell字符串拼接确保变量正确展开:
tower-cli job launch -J 762 -e '{"version": "'"$APP_VER"'"}'
解析:外层单引号保证JSON结构不被shell解析,内层的"'$APP_VER'"组合让shell先展开$APP_VER的值,再拼接成完整的JSON字符串,tower-cli能正确识别。
2. 无特殊字符时用key=value格式
如果$APP_VER的值是纯字母数字/无特殊符号,可直接用双引号包裹key=value对:
tower-cli job launch -J 762 -e "version=$APP_VER"
注意:若变量值包含空格、引号等特殊字符,必须使用JSON格式。
验证步骤
在执行tower-cli命令前先验证变量是否正确传递:
echo "当前APP_VER的值:$APP_VER"
确保输出的变量值符合预期后,再执行作业模板启动命令。
示例GitLab CI部署阶段配置
deploy: stage: deploy needs: [build] artifacts: reports: dotenv: build.env script: - echo "验证APP_VER变量:$APP_VER" - tower-cli job launch -J 762 -e '{"version": "'"$APP_VER"'"}'
内容的提问来源于stack exchange,提问作者ctnsailor
相关产品推荐
相关产品推荐

