11

我正在尝试创建一个 Azure WebJob 以将一个发送BrokeredMessage到 Azure ServiceBus 主题,创建和发送消息的实际行为是微不足道的,但是我一直无法找到一种方法来自动创建计划的 WebJob。

自动化工作流程应按如下方式工作:

  1. 创建一个新的 Azure 网站[完成]
  2. 创建一个新的触发 Azure WebJob 上传 PS1 文件[完成]
  3. 创建新的 Azure 调度程序作业集合[经过验证的概念]
  4. 创建一个触发 WebJob 的新 Azure 调度程序作业

Azure 管理门户为此功能提供了一个不错的 UI,它在幕后在选定的网站中创建了一个 Azure WebJob、一个 Azure 调度程序作业集合和一个 Azure 调度程序作业:

屏幕截图:Azure 管理门户中新建计划的 Web 作业任务的第 2 步

似乎没有用于使用 Azure 服务管理 PowerShell 模块创建计划的 Azure WebJob 的类似机制。当然可以创建新的WebJobsAzure 调度程序集合作业- 但是我不知道 Azure 调度程序发布到哪个 URL 或存储队列来调度 Azure WebJobs。

4

1 回答 1

26

Azure Scheduler 和 Azure WebJobs 之间有着密切的关系。具体来说,Azure WebJobs 没有任何对调度的内部支持,WebJobs 依赖于 Azure 调度程序来调用*.scm.azurewebsites.net网站。 Azure 网站、WebJobs 和调度程序之间的关系

因此,可以对这些服务使用 PowerShell cmdlet 来设置 Azure WebJobs,以便使用 Azure Scheduler 按计划触发。

$location = "North Europe";

$site = New-AzureWebsite -Location $location `
  -Name "amido-test-website";
$job = New-AzureWebsiteJob -Name $site.Name `
  -JobName "amido-test-job" `
  -JobType Triggered `
  -JobFile ~\Desktop\test.zip;
$jobCollection = New-AzureSchedulerJobCollection `
  -Location $location `
  -JobCollectionName "amido-test-job-collection";
$authPair = "$($site.PublishingUsername):$($site.PublishingPassword)";
$pairBytes = [System.Text.Encoding]::UTF8.GetBytes($authPair);
$encodedPair = [System.Convert]::ToBase64String($pairBytes);
New-AzureSchedulerHttpJob `
  -JobCollectionName $jobCollection[0].JobCollectionName `
  -JobName "test" `
  -Method POST `
  -URI "$($job.Url)\run" `
  -Location $location `
  -StartTime "2014-01-01" `
  -Interval 1 `
  -Frequency Minute `
  -EndTime "2015-01-01" `
  -Headers @{ `
    "Content-Type" = "text/plain"; `
    "Authorization" = "Basic $encodedPair"; `
  };

这有点冗长,所以用简单的英语来说,上面的脚本执行以下操作:

  1. 创建一个新的 Azure 网站。
  2. 创建并上传一个新的 WebJob。
  3. 创建一个新的 Azure 调度程序作业集合。
  4. 生成 HTTP 基本身份验证标头值。
  5. 创建一个新的 Azure 调度程序 HTTP 作业,该作业向 *.scm.azurewebsites.net API 发出经过身份验证的请求。

希望这可以使其他一些开发人员免于试图弄清楚这一点。

于 2014-08-22T22:35:41.280 回答