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

GitLab CI中PowerShell向release-cli传递JSON的正确方式

解决GitLab CI中PowerShell传递JSON给release-cli的引号问题

问题根源

你的错误是因为PowerShell解析Start-Process的参数字符串时,JSON中的双引号被错误拆分,导致release-cli无法正确识别--asset-link的完整参数值,误以为出现了未定义的-asset-link flag。

正确的解决方法

方法1:使用参数数组传递(推荐)

PowerShell的Start-Process的-ArgumentList支持直接传递参数数组,可避免引号转义混乱,每个参数都是独立元素:

release:
  stage: release
  tags:
    - windows
  rules:
    - if: $CI_COMMIT_TAG
  variables:
    ASSET_LINK_DETAILS: '{"name":"${PACKAGE_NAME}.zip","url":"${PACKAGE_REGISTRY_URL}/${PACKAGE_NAME}.zip"}'
  script:
    - 'Write-Host "Creating release..."'
    - |
      Start-Process -FilePath "release-cli" -ArgumentList @(
        "create",
        "--name", "Release $CI_COMMIT_TAG",
        "--tag-name", "$CI_COMMIT_TAG",
        "--asset-link", $env:ASSET_LINK_DETAILS
      ) -NoNewWindow -Wait
    - 'Write-Host "Finished creating release..."'

方法2:正确转义PowerShell中的字符串引号

如果必须用单个字符串传递参数,需在PowerShell中用反引号(`)转义JSON内部的双引号,同时确保整个参数字符串被正确包裹:

release:
  stage: release
  tags:
    - windows
  rules:
    - if: $CI_COMMIT_TAG
  variables:
    ASSET_LINK_DETAILS: "{\"name\":\"${PACKAGE_NAME}.zip\",\"url\":\"${PACKAGE_REGISTRY_URL}/${PACKAGE_NAME}.zip\"}"
  script:
    - 'Write-Host "Creating release..."'
    - 'Start-Process -FilePath "release-cli" -ArgumentList "create --name `"Release $CI_COMMIT_TAG`" --tag-name `"$CI_COMMIT_TAG`" --asset-link `"$env:ASSET_LINK_DETAILS`"" -NoNewWindow -Wait'
    - 'Write-Host "Finished creating release..."'

说明

  • 方法1的参数数组方式更可靠,PowerShell会自动处理每个参数的引号包裹,无需手动转义嵌套引号。
  • 方法2中,要在$env:ASSET_LINK_DETAILS前后添加转义的双引号("),确保release-cli收到的--asset-link参数是完整的JSON字符串。

内容的提问来源于stack exchange,提问作者Mateusz Wójt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:54:29