【问题标题】:How to put curl output to variable in bash task inline command at Azure DevOps如何在 Azure DevOps 的 bash 任务内联命令中将 curl 输出放入变量
【发布时间】:2019-09-09 02:16:10
【问题描述】:

我正在尝试让 Jenkins CSRF crumb 从 Azure DevOps 管道中的 Rest Api 调用作业,但我无法将 curl 的输出分配给变量以传递给下一个任务。

所以我尝试的第一件事是在变量组中创建一个变量并将输出分配给它,但似乎 bash 任务没有得到这个 - 它给出了退出代码 127。

jenkins.crumb 是组中的一个变量。

$(jenkins.crumb)=$(curl -u $(jenkins.user):$(jenkins.token) -s '$(jenkins.url)/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')

我尝试的第二件事是在下面的内联命令中设置变量,但它没有给出错误,但没有分配任何值。 (温度,面包屑在日志中都是空的。)

variables:
- group: Myvariables-group

  pool:
    vmImage: 'ubuntu'

  steps:
  - task: Bash@3
    name: GetCSRFcrumb
    inputs:
      targetType: 'inline'
      script: |
        temp=$(curl -u $JENKINS_USER:$JENKINS_TOKEN -s '$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
        echo "##vso[task.setvariable variable=crumb]$temp"
        echo "$temp"
        echo $temp

  - task: Bash@3
    inputs:
      targetType: 'inline'
      script: |
        echo "$(crumb)"
        echo "$CRUMB"

我想避免将 shell 脚本文件或 curl 输出创建为文件。 (如果没有其他办法,也许是最后的手段。)

【问题讨论】:

  • 如果 $temp 也是空的,那么问题出在 curl 中,您是否检查过您是否获得了输出?
  • @ShaykiAbramczyk 谢谢。我刚试过,发现它似乎是可变的问题。我的变量设置为jenkins.userjenkins.tokenjenkins.url,所以我使用$JENKINS_USER 作为文档建议的bash env,但根本没有错误,但该行中的结果为空。现在我刚刚尝试了$(jenkins.user),这是一个直接引用,然后它看起来就可以正常工作了。
  • 更准确地说,似乎秘密变量(jenkins.token)看起来不像转换为 bash env。这是我唯一需要更改为直接引用的地方。

标签: jenkins azure-devops


【解决方案1】:

所以根本原因是令牌是一个秘密变量。 一旦我将其更改为直接映射,然后 curl 返回结果。

Unlike a normal variable, they are not automatically decrypted into environment variables for scripts. You can explicitly map them in, though.

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#secret-variables

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2019-04-12
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    相关资源
    最近更新 更多