我正在尝试在Azure DevOps上构建自动生成和发布管道。 我有一个构建管道,该管道从Azure Repo中选择代码,并成功生成了一个Artifact程序包,该程序包需要部署在我的容器Orchestration的DCOS中,现在我有了一个JSON文件,该文件为我提供了配置和其他环境变量。部署所需。
JSON文件放置在我当前代码所在的Azure Repo的新文件夹中。
代理:托管的Linux计算机
当前任务: 生成新的Artifact只是为了从Azure Repo中的文件夹位置读取JSON文件,现在在发布管道任务中编写PowerShell脚本,并将其与原始包一起部署到DCOS中。
错误: 下面的power shell脚本执行时将读取JSON文件,但仅读取部分文件,而不读取数组内部的参数。
JSON文件:
{
"id": "",
"instances": 1,
"cpus": 0.05,
"mem": 256,
"disk": 0,
"gpus": 0,
"fetch": [
{
"uri": "",
"extract": true,
"executable": false,
"cache": false
}
],
"storeUrls": [],
"backoffSeconds": 1,
"backoffFactor": 1.15,
"maxLaunchDelaySeconds": 3600,
"container": {
"type": "DOCKER",
"volumes": [],
"docker": {
"image": "",
"network": "USER",
"portMappings": [
{
"containerPort": 80,
"servicePort": 10255,
"name": "pocs",
"labels": {
"VIP_0": ""
}
}
],
"privileged": false,
"parameters": [],
"forcePullImage": true
}
},
"healthChecks": [],
"readinessChecks": [],
"dependencies": [],
"upgradeStrategy": {
"minimumHealthCapacity": 1,
"maximumOverCapacity": 1
},
"ipAddress": {
"groups": [],
"networkName": "dcos"
},
"unreachableStrategy": {
"inactiveAfterSeconds": 300,
"expungeAfterSeconds": 600
},
"killSelection": "YOUNGEST_FIRST",
"requirePorts": false,
"env": {
"BaseAddress:QueryServiceAddress": "",
"ElasticSettings:Password": "",
"ElasticSettings:NodeList:2": "",
"ElasticSettings:IndexFilter:TypeIndexMapping:0:IndexMap": "",
"ElasticSettings:Username": "",
"serilog.sinks.kafka:topic": "",
"ElasticSettings:NodeList:0": "",
"LOCATION": "development",
"ElasticSettings:NodeList:1": "",
"CurrentIndex": "",
"ElasticSettings:"",
"serilog.sinks.kafka:kafka:bootstrap.servers": "",
"loglevel": "Debug"
}
我的脚本:
$defaultWorkingDir=$env:SYSTEM_DEFAULTWORKINGDIRECTORY
$pathToJson = "$defaultWorkingDir/_SG-PO-APLL-CommandService-CI/JSONfiles/dev-template.json"
$a = Get-Content -Raw $pathToJson | ConvertFrom-Json
$a | ConvertTo-Json -depth 32| Set-Content "$defaultWorkingDir/_SG-PO-APLL-CommandService-CI/JSONfiles/dev-template.json"
Write-Host $a
上方读取容器,但不读取数组内部的参数
我尝试了不同的解决方案,但是由于Agent是linux,并且没有任何工作,它正在请求一个包含默认方法和功能的系统程序集,因此我可以编写一个循环,并且可以正常工作。
由于代理是一台托管的Linux计算机,所以我不知道如何添加系统组装程序包,
方法2 :Python脚本
import json
data = json.loads(open('var/vsts/r2/a/_SG-PO-APLL-CommandService-CI/JSONfiles/dev-template.json').read())
data
此Python脚本读取了整个JSON文件,但没有使用我的默认目录SYSTEM_DEFAULTWORKINGDIRECTORY,但是如果我指定var / vsts / r2 / a,它将接受该位置