Azure Web 作业 运行 一次

Azure Web Job Run Once

我想在部署时使用一次 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 分钟的时间间隔后 运行ning 这个应用程序。有没有办法告诉azure不要重启?

部署后立即 运行 PS1 脚本有更好的方法吗?

似乎无法在部署后 运行 Web 作业。我最接近的是使用 WebJobs REST api 在部署期间触发 webjob(通过 deploy.cmd),但这不起作用,因为网站(包括 webjobs)在部署期间关闭。

我能够通过以下方式完成此操作:

  1. 将控制台应用程序创建为 Web 作业并将其设置为使用手动触发器。在我的例子中,控制台应用程序只是创建一个 DbMigrator,设置连接字符串(来自环境变量)然后调用 Update()。

  2. 使用新的 Web 作业部署您的应用程序。登录kudu控制台,确定your_console_app.exe的路径。然后创建自定义 kudu deploy.cmd,并确保在 KuduSync 部分之后调用您的网络作业。

  3. 下次部署时,您的控制台应用程序将 运行 在构建和部署所有文件后,您可以在 Kudu 或 azure 门户中看到输出.

希望这对某人有所帮助。

  1. 将您的控制台应用程序部署为具有空计划的触发式 Web 作业。

  2. 使用 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 - 应用已停止

无论网络应用程序停止或 运行。

,此解决方案都有效