如何在cURL数据字段中使用GitLab变量,并将PowerShell用作GitLab runner执行器

aurhwmvo  于 2022-11-13  发布在  Git
关注(0)|答案(2)|浏览(187)

我尝试使用GitLab API和cURL(PowerShell中的cURL.exe)发布一个带有GitLab-CI作业的版本。
但是GitLab变量转换失败了...(我尝试了几种格式都没有成功)

release_job:
  stage: release
  tags:
    - windows-powershell
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - curl.exe --data '{\"tag_name\":\"'"$CI_COMMIT_TAG"'\", \"name\":\"'"$CI_COMMIT_TAG"'\", \"ref\":\"'"$CI_COMMIT_SHORT_SHA"'\"}' --header "Content-Type:application/json" --header "PRIVATE-TOKEN:<my_private_token>" --request POST "https://<my_gitlab>/api/v4/projects/388/releases"

当我转换自己的GitLab变量的脚本状态是成功的。

release_job:
  stage: release
  tags:
    - windows-powershell
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - curl.exe --data '{\"tag_name\":\"v0.1\", \"name\":\"v0.1\", \"ref\":\"05974ba7\"}' --header "Content-Type:application/json" --header "PRIVATE-TOKEN:<my_private_token>" --request POST "https://<my_gitlab>/api/v4/projects/388/releases"

你能帮我理解一下吗。提前说,谢谢。

8gsdolmq

8gsdolmq1#

这是对使用PowerShell进行字符转义缺乏了解。
使用PowerShell时,双引号括起的字符串中的双引号字符(")必须先通过反勾号进行转义。 而在PowerShell中,如果反勾号字符出现在任何用双引号引起来的字符串中,则需要对其进行转义。
来源:Escaping in PowerShell by Hilltop Lab
因此解决方案是:

curl.exe --data "{\`"tag_name\`":\`"$CI_COMMIT_TAG\`", \`"name\`":\`"$CI_COMMIT_TAG\`", \`"ref\`":\`"$CI_COMMIT_SHORT_SHA\`"}" --header "Content-Type:application/json" --header "PRIVATE-TOKEN:<my_private_token>" --request POST "https://<my_gitlab>/api/v4/projects/388/releases"
j8yoct9x

j8yoct9x2#

私有令牌:$env:令牌变量名称

相关问题