在Jenkins管道中转换appsettings.json文件

时间:2019-11-19 08:29:26

标签: jenkins asp.net-core jenkins-pipeline

我正在尝试通过Jenkins Pipeline转换Dotnet 3.0测试项目的appsettings.json文件。 jenkins管道(取决于代理)将在设置文件中传递一个我想更改的特定IP地址,以便在构建和部署应用程序时使用新的IP地址。

Jenkinsfile

pipeline {
  agent any
  parameters {
    string(name: 'SERVER_ADDRESS', defaultValue: '127.0.0.1', description: 'IP Address of Server');
  }
  stages {
    stage('Change Appsettings') {
      steps {
        echo "Address is ${params.SERVER_ADDRESS}"
        sed -i '/ServerGateway/c\ \"ServerGateway\": \"'+${params.SERVER_ADDRESS}+'\",' TestWebapi/appsettings.json
      }
    }
  }
}

Appsettings.json

{
  "ConnectionStrings": {
       "ServerGateway": "127.0.0.1"
  }
}

我真的不知道有什么更好的方法,也许有一个插件,但是我所知道的是我可以使用sed。

任何更好,更清洁的解决方案都值得赞赏。

2 个答案:

答案 0 :(得分:0)

据我所知,您想修改ServerGateway的值  在 AppSettings.json 中。您可以这样做。

import groovy.json.JsonSlurper
def json = new JsonSlurper()
appSettings = json.parse(new File("path_to_AppSettings.json"))

然后分配您要使用的新值

appSettings['ConnectionStrings'].ServerGateway = Your New Value
println(appSettings['ConnectionStrings'].ServerGateway) // will have your new value stored.

import groovy.json.JsonSlurper
def cfg = ""


def storeNewValue(serverAdress) {
    def json = new JsonSlurper()
    appSettings = json.parse(new File("TestWebapi/appsettings.json"))
    appSettings['ConnectionStrings'].ServerGateway = serverAdress
    cfg = appSettings
    //return appSettings['ConnectionStrings'].ServerGateway
}

pipeline {
  agent any
  parameters {
    string(name: 'SERVER_ADDRESS', defaultValue: '127.0.0.1', description: 'IP Address of Server');
  }
  stages {
    stage('Change Appsettings') {
      steps {
        echo "Address is ${params.SERVER_ADDRESS}"
        storeNewValue(params.SERVER_ADDRESS)
      }
    }
  }
}

此后,您可以使用cfg

访问新值

答案 1 :(得分:0)

使用环境变量。

环境变量将覆盖appsettings.json中指定的配置值,并且是在诸如Jenkins之类的CI环境中配置设置的最佳方法。如果您使用的是CreateDefaultBuilder(args),或者您使用的可能是Configuration.AddEnvironmentVariables,它们都会这样做。

在当前情况下,您尝试覆盖以下设置:

{
    "ConnectionStrings": {
        "ServerGateway": "127.0.0.1"
    }
}

您可以通过设置以下环境变量来做到这一点:ConnectionStrings:ServerGateway=connectionstring...如果您的环境不支持冒号(:),可以用双下划线代替ConnectionStrings__ServerGateway=connectionstring...

您可以获取有关此方法from MSDN

的更多信息