【问题标题】:What is the best way to stop triggered web jobs停止触发的网络作业的最佳方法是什么
【发布时间】:2017-10-31 04:20:59
【问题描述】:

我得到了团队的要求,例如,目前他们正在通过设置计划以特定的时间间隔运行触发的作业。他们已经设置了计划,因此按照计划的时间,这些触发的作业将运行,但在部署时我们必须确保触发的作业不应该运行,因为它不会接受将部署 jar 放入天蓝色。所以我想运行 webjobs 连续作业停止并且触发的作业不应该运行。它应该检查当时正在运行的触发作业如果它正在运行,即使您停止连续作业,我们也无法部署 jar。请帮助我。如何完成上述任务?如果它运行如何部署jar,我们是否需要添加任何脚本来检查触发的作业是否运行。

还有其他要求,目前我们正在传递类似的参数

-webjobs @(@{"name"="abc";"typeName"='continuous'},@{"name"="def";"ty‌​peName"='continuous'‌​}) -网站kgh -rg ghi....

但是团队希望这些参数将在单独的文件中传递。这样当他们添加新的 Web 作业时,他们可以自己添加文件。如果我将参数脚本放在单独的文件中并传递给网络作业脚本。

任何网络作业的部署后我都应该验证网络作业是否正确启动。所以我需要在脚本中实现这 3 个要求。请与我分享满足上述要求的脚本。

【问题讨论】:

    标签: azure azure-devops


    【解决方案1】:

    你可以通过Process kudu API获取当前web app的进程,然后检查是否有与WebJob相关的进程(进程名),如果有则杀死该进程。

    例如:

    param(
    [string]$webJobName,
    [string]$userName,
    [string]$password,
    [string]$webAppName
    )
    $kuduApiAuthorisationToken="Basic {0}" -f [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $userName, $password)))
    $kuduApiUrl="https://$webAppName.scm.azurewebsites.net/api/processes/"
    $processes=Invoke-RestMethod -Uri $kuduApiUrl -Headers @{"Authorization"=$kuduApiAuthorisationToken;"If-Match"="*"} -Method GET
    foreach($p in $processes){
        if($p.name -eq $webJobName){
        $killAPI="https://$webAppName.scm.azurewebsites.net/api/processes/$($p.id)"
        Invoke-RestMethod -Uri $killAPI -Headers @{"Authorization"=$kuduApiAuthorisationToken;"If-Match"="*"} -Method DELETE
        }
    }
    

    参数:-webJobName "XX" -userName "XX" -password "XX" -webAppName "XX"

    注意:如果用户名中有$,如$test,可以指定用户名如-userName "`$test"

    您可以手动或以编程方式从发布配置文件中获取用户名和密码:(在您的帖子中回答:Could any one help me how to stop and start azure webjobs through vsts

    关于将参数放入文件:

    参数.json

    [
      {
        "filepath": "data.csv",
        "Cols": "Col1,Col2,Col3"
      },
      {
        "filepath": "data2.csv",
        "Cols": "Col1,Col6,Col7,Col8"
      }
    ]
    

    代码:

    [object[]]$fileObj=Get-Content "parameter.json"|ConvertFrom-Json
    foreach($fo in $fileObj){
    
    }
    

    更新:

    Parameter.json:

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

    脚本:

     [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
         }
         }
    

    【讨论】:

    • 您好 MSFT,感谢您的回复。我问过你在单独的文件中调用 webjobs 的参数,而不是表存储。你能评论一下吗?假设: 参数:-webJobName "XX" -userName "XX" -password "XX" -webAppName "XX" 和 -webjobs @(@{"name"="abc";"typeName"='continuous'},@{ "name"="def";"ty‌​peName"='continuous'‌​}) -website kgh -rg ghi.... 这些参数我们正在使用 powershell 任务中的参数部分传递给脚本,那么如何传递这些参数在一个文件中。
    • @PDBRPRAVEEN 已更新。
    • 您好 MSFT,这里 Webapp 名称的意思是 ResourceName 或 ResourceGroupName。请确认我。
    • 我尝试使用 -webJobName "XX" -userName "XX" -password "XX" -webAppName " ResourceGroupName" 和 -webJobName "XX" -userName "XX" -password "XX" -webAppName " ResourceName"...但我收到以下错误:
    • 2017-10-31T10:09:54.3429667Z ##[error]远程服务器返回错误:(401) Unauthorized。 2017-10-31T10:09:54.3659661Z ##[section]完成:Azure PowerShell 脚本:FilePath
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多