如何在Azure DevOps的bash任务内联命令中将curl输出放到变量中

时间:2019-09-06 23:18:08

标签: jenkins azure-devops

我正试图让Jenkins CSRF屑在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)')

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

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脚本文件或将输出卷曲为文件。 (如果没有其他方法,也许是最后的选择。)

1 个答案:

答案 0 :(得分: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