首页 > 解决方案 > 在 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,它会接受该位置

标签: azure-devops

解决方案


推荐阅读