Azure DevOps Через curl или получить выходное значение задачи в качестве новой переменной - PullRequest
1 голос
/ 10 марта 2020

Мне нужно go через curl restAPI и выполнить grep содержимого и вырезать определенные символы, чтобы получить новое значение токена в качестве переменной. Но я не знаю, как сделать операции curl, grep, cut ... в переменные

Является ли логика c выполнения этих операций с переменными возможными?

EX.

- task: Bash@3
  displayName: GetToken
  inputs:
    targetType: 'inline'
    script: 
        token= curl -H $HEADER -D $DATA www.example.com | grep -oEi $pattern | cut -d ':' -f 2 | cut -d '"' -f 2
        echo "##vso[task.setvariable variable=token;]$token

Или я могу получить значение вывода задачи, чтобы установить новая переменная? напр.

- task: Bash@3
  displayName: CreateToken
  inputs:
    targetType: 'inline'
    script: 
       curl --header $HEADER --data "{userKey:$USERKEY,orgToken:$ORGTOKEN,requestType:getAllProducts}" $API |grep -oEI "\"productName\":\"$PRODUCTNAME\",\"productToken\":\"[0-9a-f]*\"" | cut -d ':' -f 3 | cut -d '"' -f 2

Output
========================== Starting Command Output ===========================
/bin/bash --noprofile --norc /home/vsts/work/_temp/a6f13e9c-2c45-4ac7-9674-42de3efe2503.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   147    0     0  100   147      0    158 --:--:-- --:--:-- --:--:--   158
100 13655    0 13508  100   147  12577    136  0:00:01  0:00:01 --:--:-- 12714

33234d4db39844cf8c73c54e398c44c248ab368f319a4af7b9646cb461fa60b9 //I want to get this value as new variable

- task: Bash@3
  displayName: GetCreateToken
  inputs:
    targetType: 'inline'
    script:
        Token= $CreateToken
        echo "##vso[task.setvariable variable=token;]$token

1 Ответ

0 голосов
/ 10 марта 2020

Если я правильно вас понимаю, ваш вопрос касается того, как передать выходные данные сценария оболочки в переменную, которая будет использоваться другими задачами? Если это так, вы можете изменить заголовок вопроса на что-то вроде «Azure конвейер DevOps - передача вывода сценария оболочки в переменные», чтобы помочь другим найти ответчика.

В любом случае, попробуйте это так:

- bash: Bash@3
  displayName: GetToken
  inputs:
    targetType: 'inline'
    script: 
        # Note the $() around the call of curl, grep and cut. If you want to assign the result of a call, then encapsulate it into $()
        token=$(curl -H $HEADER -D $DATA www.example.com | grep -oEi $pattern | cut -d ':' -f 2 | cut -d '"' -f 2)
        echo "##vso[task.setvariable variable=token;]$token"

  # Just a side note: This is the short-hand syntax for using the bash task
- bash: |
    echo "$(token)" 

См. Также документы о том, как установить переменную конвейера в задачах сценария.
Если вы хотите использовать переменную в другом задании, то синтаксис немного отличается и задокументировано здесь :

- job: A
  steps:
  - bash: |
      token=$(curl -H $HEADER -D $DATA www.example.com | grep -oEi $pattern | cut -d ':' -f 2 | cut -d '"' -f 2)
      echo "##vso[task.setvariable variable=token;isOutput=true]$token"
    displayName: GetToken
    name: gettoken # you have to give the task a name to be able to access it through dependencies object below

- job: B
  dependsOn: A
  variables:
    token: $[ dependencies.A.outputs['gettoken.token'] ]

Вы также можете взглянуть на Как установить переменную для вывода команды в Bash? .

...