我想在部署时使用Azure Web作业运行一次(从Github继续部署)。在我的控制台应用程序中,我只需打印一行并退出。我选择连续计划:
namespace MyApp.Deployment
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Performing EF Migrations at " + DateTime.Now.ToLongDateString());
//run EF migrations here.
//Can't run migrations in my web service App_Start because web service connects as a limited SQL user.
Console.WriteLine("Migrations complete");
}
}
}
但azure只是在1分钟间隔后继续运行此应用程序。有没有告诉azure不要重启它?
部署后是否有更好的方法立即运行PS1脚本?
答案 0 :(得分:1)
我能够通过以下方式实现这一目标:
将控制台应用程序创建为Web作业,并将其设置为使用手动触发器。在我的例子中,控制台应用程序只是创建一个DbMigrator,设置连接字符串(来自环境变量),然后调用Update()。
使用新的Web作业部署应用程序。登录kudu控制台,确定your_console_app.exe的路径。然后创建一个自定义kudu deploy.cmd,并确保在KuduSync部分之后调用您的Web作业。
下次部署时,您的控制台应用程序将在构建和部署所有文件后运行,您可以在Kudu或azure门户中查看输出。
希望这有助于某人。
答案 1 :(得分:0)
部署后似乎无法运行一次webjob。他们最接近的是使用WebJobs REST api在部署期间触发webjob(通过deploy.cmd),但这不起作用,因为网站(包括webjobs)在部署期间关闭。
答案 2 :(得分:0)
将您的控制台应用部署为具有空时间表的触发式网络作业。
使用 kudu API 从 CI/CD 管道启动 webjob。使用以下脚本为它使用 PowerShell 任务:
$kuduApiAuthorisationToken ="Basic {0}" -f
[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f
$env:Username, $env:Password)))
$kuduApiUrl =
"https://$env:WebAppName.scm.azurewebsites.net/api/triggeredwebjobs/DbUp/run"
Invoke-RestMethod -Uri $kuduApiUrl -Headers
@{"Authorization"=$kuduApiAuthorisationToken;"If-Match"="*"} -Method POST
-ContentType "application/json"
您可以从应用发布配置文件中获取用户名和密码。 -ContentType "application/json 很重要。没有它你会得到误导性的 403 - 应用程序已停止
无论 Web 应用处于停止状态还是正在运行,此解决方案都有效。