You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:15:47