在Linux代理上读取JSON文件并在DCOS上部署

时间:2019-08-05 16:24:57

标签: azure-devops

我正在尝试在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,它将接受该位置

0 个答案:

没有答案