【问题标题】:GitLab CI - passing JSON into a release-cli command with PowerShellGitLab CI - 使用 PowerShell 将 JSON 传递到 release-cli 命令
【发布时间】:2022-09-29 19:42:32
【问题描述】:

我正在尝试传递在 GitLab 中注册新版本所需的 JSON 结构,但我不确定应该如何转义双引号。这是我的gitlab-ci.yml 的发布工作部分:

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...\"\'

运行此作业会从 release-cli 返回错误:

Incorrect Usage: flag provided but not defined: -asset-link

将此 JSON 传递到 PowerShell 中的命令的正确方法是什么?

  • 尝试用一些引号限定 JSON 字符串:--asset-link ${env:ASSET_LINK_DETAILS} -> --asset-link \'${env:ASSET_LINK_DETAILS}\'
  • 我尝试用像`\"${env:ASSET_LINK_DETAILS}`\" 这样的转义双引号将其包裹起来,但它给了我同样的错误。

标签: json powershell gitlab gitlab-ci gitlab-ci-runner


【解决方案1】:

我在 GitLab 发布文档中找到了答案,那里有一个完整的示例。 PowerShell 可以是 PITA...

https://docs.gitlab.com/ee/user/project/releases/release_fields.html#use-a-generic-package-for-attaching-binaries

这是一个例子:

- $env:asset = "{`"name`":`"$env:PACKAGE_NAME.zip`",`"url`":`"$env:PACKAGE_REGISTRY_URL/$env:PACKAGE_NAME.zip`"}"
- $env:assetjson = $env:asset | ConvertTo-Json
- Start-Process -FilePath "C:\GitLab\Release-CLI\bin\release-cli" -ArgumentList "create --name `"$CI_COMMIT_TAG`" --description `"Release $CI_COMMIT_TAG`" --tag-name `"$CI_COMMIT_TAG`" --ref `"$CI_COMMIT_TAG`" --assets-link=$env:assetjson" -NoNewWindow -Wait

【讨论】:

    猜你喜欢
    • 2022-08-06
    • 1970-01-01
    • 2018-12-14
    • 2017-07-12
    • 1970-01-01
    • 2019-05-13
    • 2022-01-15
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多