[英]How to pass Json variable to command line task in Azure DevOps pipeline?
[英]How to pass Json variable as inputs in Azure DevOps pipeline task
我在管道運行期間根據少量管道參數和預定義的環境變量動態形成 JSON,並嘗試將此 JSON 作為后續管道任務的輸入傳遞。
jobs:
- job: PayloadCreation
pool: linux-agent (or windows)
steps:
- ${{ each app in apps }}:
- bash: |
payload=$(jq .artifact += [{"name": "${{ app.name}}, "version":"$(Build.BuildId)"}]' artifact.json)
echo $payload > artifact.json
echo "##vso[task.setvariable variable=payload]$payload"
我得到了artifact.json
的 output 以及變量 $payload 如下 -
"artifacts": [
{
"name":"service-a",
"version":"1.0.0"
},
{
"name":"service-b",
"version": "1.0.1"
}
]
}
隨后,我嘗試使用此 JSON 變量將其作為輸入傳遞給以下作業,但無法這樣做。
- job: JobB
steps:
- task: SericeNow-DevOps-Agent-Artifact-Registration@1
inputs:
connectedServiceName: 'test-SC'
artifactsPayload: $(payload)
它無法讀取 JSON 作為輸入變量。 我收到以下錯誤 - Artifact Registration could not be sent due to the exception: Unexpected token $ in JSON at position 0
有沒有其他方法可以將 JSON 作為輸入變量傳遞?
默認情況下,作業之間的變量不可用。 在JobB
中,未定義$(payload)
變量。
設置變量時,需要提供isOutput
: echo "##vso[task.setvariable variable=payload;isOutput=true]$payload"
引用變量時,需要使用適當的運行時表達式:
variables:
payload: $[ dependencies.PayloadCreation.outputs['payload'] ]
有沒有其他方法可以將 JSON 作為輸入變量傳遞?
嚴格來說,沒有。 DevOps pipeline 概念下的變量不支持 JSON object。
為什么沒有?
變量總是字符串。
但這並不意味着您不能傳遞 JSON 信息,如果您願意,傳遞字符串是唯一的方法。
任務是自己設計的嗎?
將字符串 object 轉換為 JSON object 並不難:
//convert string object to json object
var str = `
{
"artifacts": [
{
"name":"service-a",
"version":"1.0.0"
},
{
"name":"service-b",
"version": "1.0.1"
}
]
}
`;
var obj = JSON.parse(str);
console.log(obj.artifacts[0].name);
console.log(obj.artifacts[0].version);
不確定您的任務設計如何,但丹尼爾傳遞變量的方法是正確的。
將字符串 object 轉換為 JSON object 后,您可以在擴展任務代碼中進行操作。
這里我添加日志命令的其他相關信息:
順便說一句,在您的問題中,json 是
"artifacts": [
{
"name":"service-a",
"version":"1.0.0"
},
{
"name":"service-b",
"version": "1.0.1"
}
]
}
不應該是這樣嗎?
{
"artifacts": [
{
"name":"service-a",
"version":"1.0.0"
},
{
"name":"service-b",
"version": "1.0.1"
}
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.