- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在找什么:
更多详情:
我们将 Azure DevOps 发布管道与 AzureRMWebAppDelopyment@4 任务结合使用。我们能够将 Azure WebJob 部署到暂存和生产环境。
最近我们发现我们的 WebJob 由于一些错误的代码而没有真正启动。由于 WebJob 的性质,我们无法在暂存中轻松识别它。我们将错误的代码部署到生产环境中,几天后,由于错误的警报,得知 WebJob 没有运行并且我们的队列被严重备份。
这个问题是我们希望/需要我们的发布管道报告每个 WebJob 启动失败。 API 使用 HealthChecks 来验证部署是否已启动、是否健康以及是否真的可以正常运行。我们需要在我们的发布管道期间检查 WebJob 的状态,以便管道失败,这样我们就不会认为一切正常,而实际上它不正常。
在我们的研究中,我们发现我们可以潜在地使用 Kudu,但到目前为止,我们无法找到如何让它作为发布管道的一部分工作。
最佳答案
综合多个来源的想法后,我们提出了这个解决方案:
在所需阶段的所需 Azure Release Pipeline 中添加 Azure CLI 任务。此任务可以接受内联 PowerShell 脚本或 PowerShell 脚本的路径。 选择你自己的冒险。我们选择使用包含的脚本(如下)创建一个CheckWebJobStatus.ps1
,并将其公开为我们的 Azure Release Pipeline 可用的工件。
简而言之,这个 PowerShell 脚本的作用:
它最多检查目标 WebJob 的状态 10 次(可通过 $totalRuns
配置),检查之间等待 5 秒,并等待连续 3 次 Running
状态报告。
param(
$resourceGroup,
$appServiceName,
$jobName,
$totalRuns = 10
)
Write-Host "Checking status of $jobName in $resourceGroup/$appServiceName"
$consecutiveRunningStatuses = 0
if ($totalRuns -lt 3) {
Write-Error "totalRuns must be 3 or greater"
exit 1
}
for ($i = 0; $i -lt $totalRuns; $i++) {
$jobs = (az webapp webjob continuous list --name $appServiceName --resource-group $resourceGroup | ConvertFrom-Json)
foreach ($job in $jobs) {
if ($job.name -eq "$appServiceName/$jobName") {
if ($job.status -eq "Running") {
Write-Host "$jobName is running! Attempt $i"
$consecutiveRunningStatuses++
if ($consecutiveRunningStatuses -eq 3) {
Write-Host "$jobName is running $consecutiveRunningStatuses times in a row! We assume that means it is stable."
exit 0
}
}
else {
Write-Host "$jobName status is $($job.status). Attempt $i"
$consecutiveRunningStatuses = 0
}
}
}
if ($i -ne ($totalRuns - 1)) {
Start-Sleep 5
}
}
Write-Host "$jobName failed to start after $totalRuns checks"
exit 1
为什么 3 个连续的 Running
状态报告?
因为 Azure WebJobs 状态报告不可靠。当 WebJob 首次部署时,它会进入 Starting
状态,然后进入 Running
状态。到目前为止这看起来不错。但是,如果启动时出现 fatal error ,如缺少依赖项,则作业会进入 Pending Restart
状态。在我们的观察中,Azure 要么自动尝试再次启动 WebJob,要么状态变得奇怪并被错误地报告为处于 Running
状态。然后 WebJob 将重新进入 Pending Restart
状态并保持该状态,直到下一次明确尝试部署或启动它。在我们的观察中,我们没有看到失败的 WebJob 保持 Running
状态超过 2 个连续报告,间隔 5 秒,或者换句话说,在任何 15 秒窗口内。因此,在脚本中,我们现在假设,如果我们在 15 秒内收到 3 个连续的 Running
状态报告,则 WebJob 被假定为 Running
。
旁白 - 我们是如何做到的:
我们使用自己的 azure-pipelines.yaml
构建配置创建了一个专用的 DeployTools 存储库,它只发布包含该 PowerShell 文件的文件夹。然后在我们想要的 Azure Release Pipeline 中,我们附加了 DeployTools 构建中的工件。
关于azure-devops - 当 Azure WebJob 无法启动/运行时无法使 Azure DevOps Release Pipeline 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64447834/
我有一个 Azure WebJob,我正在从 visual studio 2017 发布到标准 S1 应用服务,WebJob 应该由 CRON 触发,但始终发布为连续,我无法弄清楚我做错了什么(另外两
我需要在计划的时间段内为不同的用户运行一项作业(例如 CRM 同步)。此同步由 ServiceBus 队列上的另一个函数放置的消息触发,该函数每 30 分钟由 TimerTrigger 触发一次。 现
我需要在计划的时间段内为不同的用户运行一项作业(例如 CRM 同步)。此同步由 ServiceBus 队列上的另一个函数放置的消息触发,该函数每 30 分钟由 TimerTrigger 触发一次。 现
我无法将计划的 Web 作业发布到 Azure 应用服务。我正在使用 Visual Studio 2017。 使用此设置一切正常: { "$schema": "http://schemastore.o
我计划使用连续的 Azure WebJob 发送电子邮件和推送通知。我了解 WebJobs 会因各种原因不时启动和停止。没关系,但我希望有机会在工作关闭之前“清理”一下。 这样我的 WebJob 可以
我已经看到了一些关于使用 settings.job 的指导。为此,但它不起作用 - 在控制台中我看到: WebJob singleton setting is False 如何防止横向扩展运行我的
我正在尝试部署一个触发的网络作业并使用 settings.json 文件安排它。我的 webapp 在 3 个实例中运行,所以我假设 webjob 将在 3 个实例中部署。因此,如果我使用带有 cro
我正在尝试找出是否有任何方法可以修改 webjobs sdk 重试策略。 现在,如果网络作业抛出异常,它会立即重新排队。这并不理想,特别是如果错误是由于数据库超时之类的原因造成的。 有谁知道该策略是否
我正在尝试部署一个触发的网络作业并使用 settings.json 文件安排它。我的 webapp 在 3 个实例中运行,所以我假设 webjob 将在 3 个实例中部署。因此,如果我使用带有 cro
我有一个启用了 Azure 持续交付的 Web 应用程序 (azure webapp)。这意味着每当我进行提交并将其推送到远程时,它都会自动构建应用程序并部署它。 我还有一些网络作业,我希望该过程也可
有没有办法从 MVC 应用程序中更改 webjob 的预定时间,或者是通过 azure 门户的唯一方法。 我不是指初始计划时间,而是在部署后通过 Mvc 应用程序中的 UI 更改计划时间。 最佳答案
Azure 提供了创建“触发式”WebJob 的可能性,例如每天都有时间表。 此外,还有 azure-webjobs-sdk-extensions( https://github.com/Azure/
我开始使用 WebJobs 来处理一些后台任务,但我遇到了关于错误处理和重试的问题。看来,如果我的任何函数是异步的,那么即使我在函数中抛出异常,该函数总是会在仪表板中报告成功。 考虑以下简单示例 ->
我们有一个带有“暂存”部署槽的 Azure 网站设置,我们使用连续的 Azure WebJob 来处理长时间运行的后台作业。看来,当您发布到网站(并包含 WebJob 二进制文件)时,如果 WebJo
我正在开发一个使用 TimerTrigger 的触发式网络作业. 在webjob停止之前,我需要处理一些对象,但我不知道如何触发“webjob停止”。 有了 NoAutomaticTrigger 函数
我正在处理一个网络作业,用于检查网络服务器的一些数据。有时网络服务器很忙,会在几秒钟后重试。 问题是,如果我只是忽略它并通过该函数,它将从队列中删除消息,我将无法重试调用。 我当前的解决方案(我一点也
我读过关于优雅关机的文章 here使用 WEBJOBS_SHUTDOWN_FILE 和 here使用取消 token ,所以我理解正常关闭的前提,但是我不确定它们将如何影响正在处理队列消息的 WebJ
如果运行webjob时出现任何异常或错误,我想释放所有对象。我如何知道是否发生错误。webjob 是否有任何错误触发器? 最佳答案 可以有两种方法来处理这个问题: 1) Try/Catch 方法:-
我在 AppService 中长时间运行 Web 作业(大约 1 小时)。AppService 已打开“始终打开”。 它的初始化是: var host = new JobHost(config); h
我在 AppService 中长时间运行 Web 作业(大约 1 小时)。AppService 已打开“始终打开”。 它的初始化是: var host = new JobHost(config); h
我是一名优秀的程序员,十分优秀!