【问题标题】:How to pass multiple webjobs as a parameter to the PowerShell script如何将多个 webjobs 作为参数传递给 PowerShell 脚本
【发布时间】:2017-12-06 12:51:25
【问题描述】:

提供以下脚本以在 azure 中启动 Webjobs。但我将 Json 文件包含到 Powershell 脚本中并运行 Webjobs。它仅适用于一个环境。但我希望同一个脚本用于多个具有不同 Webjob 名称的环境。那么如何修改此脚本,以便在发布定义时停止和启动 VSTS 中的 Webjobs,目前,我有 4 个用于开发环境的 Webjobs,我有 8 个用于具有不同天蓝色订阅的 Int Environment 的 Webjobs。那么如何将以下脚本用于不同的环境。请帮助我。我不能将以下脚本用于所有环境,因为我正在导入唯一的一个 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
         }
         }

【问题讨论】:

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


    【解决方案1】:

    您可以像这样更新 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)

    【讨论】:

    • @MSFT,再次非常感谢。它现在可以工作了。但是我有一个关于 webjobs 验证的问题。请检查这个脚本@@stackoverflow.com/questions/47694580/… ..这个链接,请让我知道怎么做我在 webjob 启动和 webjob 停止后验证我的 webjobs 是否正确启动和停止。
    • 您好 msft,您能帮我解决在我共享的新线程链接中打开的问题吗?
    猜你喜欢
    • 2017-05-08
    • 2019-07-07
    • 2011-08-01
    • 1970-01-01
    • 2010-09-06
    • 2021-09-18
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多