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

GitLab CI流水线单引号内嵌套双引号时变量无法解析问题

解决GitLab CI中jq无法解析变量的问题

问题核心是shell单引号会阻止变量解析:你原命令用单引号包裹jq表达式,导致${TAG}始终是字符串字面量,不会被替换为GitLab变量的实际值。以下是两种直接可行的解决方法:

方法1:用shell双引号包裹jq表达式

将整个jq表达式用双引号包裹,同时转义表达式内部的双引号,让shell优先解析${TAG}变量:

jq -r ".version |= \"${TAG}\"" temp.json > package.json

对应GitLab CI的script行修改为:

- jq -r ".version |= \"${TAG}\"" temp.json > package.json

方法2:用jq的--arg参数传递变量(推荐)

这种方式无需处理转义,还能兼容变量包含特殊字符的场景,更可靠:

jq -r --arg tag "$TAG" '.version |= $tag' temp.json > package.json

对应GitLab CI的script行修改为:

- jq -r --arg tag "$TAG" '.version |= $tag' temp.json > package.json

完整修改后的GitLab CI配置示例

build-cloudfront:
  stage: build
  image: node:18
  variables:
    TAG: $CI_COMMIT_TAG
  script:
    - apt-get update
    - apt-get install jq -y
    - mv package.json temp.json
    - jq -r --arg tag "$TAG" '.version |= $tag' temp.json > package.json
    - npm install
    - npm run build
    - echo "FRONTEND BUILD SUCCESSFULY"
  artifacts:
    paths:
      - dist/
    expire_in: "10 mins"
  only:
    - tags

内容的提问来源于stack exchange,提问作者Diego Araujo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:52:53