azure-devops - 在 Linux 代理上读取 JSON 文件并将其部署在 DCOS 上
问题描述
我正在尝试在 Azure DevOps 上构建自动构建和发布管道。我有一个构建管道,它从 Azure Repo 中选择代码,并在成功后生成一个 Artifact 包,该包需要部署在 DCOS 中,这是我的容器编排,现在我有一个 JSON 文件,它为我提供了配置和其他环境变量部署所需。
JSON 文件放置在 Azure Repo 中我当前代码所在的新文件夹中。
代理:托管 Linux 机器
当前任务:生成一个新的工件只是为了从 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
上面读取的是 Container 但不是 Array 中的参数
我尝试了不同的解决方案,但没有任何工作,因为代理是 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,它会接受该位置
解决方案
推荐阅读
- angularjs - 更新 angular-moment-picker 以使用不同的时区
- c++ - 我不确定为什么“计数器”变量没有以我希望的方式响应
- html - 为什么我不能使用 text-align: center 在 html 中将这个文本类型的表单输入字段居中?
- presto - 强制 presto 在目标数据库中执行 sql 片段(具有 where 条件的视图)
- android - Flutter 获取源 URL 以及从网页共享的文本
- entity-framework-core - QueryTrackingBehavior 对 DbContext 没有影响
- tensorflow - 如何计算训练时所需的 GPU 内存
- html - Bootstrap 3 列对所有行具有相同的高度
- python - 使用某些字符串匹配python删除特定列之后的所有后续列
- javascript - React Native - 使用useRef向后播放动画?错误 - “未定义不是对象?”