如何将多个webjobs作为参数传递给PowerShell脚本

时间:2017-12-06 12:51:26

标签: powershell azure-webjobs azure-pipelines-release-pipeline

提供下面的脚本来启动azure中的Webjobs。但是我将Json文件包含在Powershell脚本中并运行Webjobs.Its仅适用于一个环境。但我希望将相同的脚本用于多个具有不同Webjob名称的环境。那么如何修改此脚本以便我可以在发布定义中停止并启动VSTS中的Webjobs,目前,我有4个用于Dev Environment的Webjobs,我有8个用于Int Environment的Webjobs,具有不同的azure订阅。那么我怎样才能将下面的脚本用于不同的环境。请帮我解决这个问题。我不能在所有环境中使用下面的脚本,因为我只导入了一个json文件。所以它只接受特定的json参数。但在我的情况下,json参数对于不同的环境会有所不同。那么如何将不同的json文件内容导入下面的脚本?是否有可能包含多个json文件,脚本只能接受基于我在VSTS中的发布定义中运行的环境的特定Json脚本,并且可以相应地运行。

Parameter.json:

{
    "userName": "user1",
    "password": "password1",
    "webAppName": "webapp1",
    "resourceGroup": "resourceGroup1",
    "webJobs": [   
      {
        "name": "abc",
        "typeName": "continuous"
      },
      {
        "name": "def",
        "typeName": "continuou‌s"
      }
    ]
  }

脚本:

[object]$paramObj=Get-Content "PowerShellModuleProject1\parameter2.json"|ConvertFrom-Json 
        $userName =$paramObj.userName
        $password =$paramObj.password
        $webAppName =$paramObj.webAppName
        $resourceGroup=$paramObj.resourceGroup
        [object[]]$webJobs=$paramObj.webJobs
        foreach($wj in $webjobs){
         if($wj.typeName -eq "continuous")
         {
    Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName "$webAppName/$($wj.name)" -Action start -ApiVersion 2015-08-01 -Force
          Write-Host "continuous"
         Write-Host $wj.name
         }
         else{
         Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/TriggeredWebJobs -ResourceName "$webAppName/$($wj.name)" -Action run -ApiVersion 2015-08-01 -force
         Write-Host "triggered"
         Write-Host $wj.name
         }
         }

1 个答案:

答案 0 :(得分:0)

您可以像这样更新Parameter.json文件(parameter2.json):

{
  "Dev": {
    "userName": "user1",
    "password": "password1",
    "webAppName": "webapp1",
    "resourceGroup": "resourceGroup1",
    "webJobs": [
      {
        "name": "abcDev",
        "typeName": "continuous"
      },
      {
        "name": "defDev",
        "typeName": "continuous"
      }
    ]
  },
  "Int": {
    "userName": "userInt",
    "password": "passwordInt",
    "webAppName": "webappInt",
    "resourceGroup": "resourceGroupInt",
    "webJobs": [
      {
        "name": "abcInt",
        "typeName": "continuous"
      },
      {
        "name": "defInt",
        "typeName": "continuous"
      }
    ]
  }
}

脚本:

param(
[string]$currentEnv
)
[object]$paramObj=Get-Content "PowerShellModuleProject1\parameter2.json"|ConvertFrom-Json 
$userName =$paramObj.$currentEnv.userName
$password =$paramObj.$currentEnv.password
$webAppName =$paramObj.$currentEnv.webAppName
$resourceGroup=$paramObj.$currentEnv.resourceGroup
[object[]]$webJobs=$paramObj.$currentEnv.webJobs
foreach($wj in $webjobs){
         if($wj.typeName -eq "continuous")
         {
    Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName "$webAppName/$($wj.name)" -Action start -ApiVersion 2015-08-01 -Force
          Write-Host "continuous"
         Write-Host $wj.name
         }
         else{
         Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/TriggeredWebJobs -ResourceName "$webAppName/$($wj.name)" -Action run -ApiVersion 2015-08-01 -force
         Write-Host "triggered"
         Write-Host $wj.name
         }
         }

参数:-currentEnv $(Release.EnvironmentName)。修改发布定义中的每个环境的名称。

或者您可以为每个发布环境添加具有相同名称的环境变量(例如currentEnv),以及参数:-currentEnv $(currentEnv)