如何从管道部署 WebJobHow to deploy a WebJob from a pipeline

How to deploy a WebJob from a pipeline

提问人:PointlessSpike 提问时间:11/17/2023 更新时间:11/18/2023 访问量:41

问:

我正在尝试为应用服务部署 WebJob,以及应用服务本身。但是我发现没有一种方法有效。有关该主题的所有在线信息似乎都已过时(我找不到 Microsoft 文档)。

其他一切正常 - 我已经验证了工件在正确的位置具有所有正确的文件。应用服务本身上传正常。问题纯粹是 WebJob。(为了清晰和安全起见,我对此进行了编辑)

trigger:
- development

pool:
  vmImage: windows-latest

variables:
  BuildConfiguration: 'Release'
  AzureSubscription: 'Subscription'

stages:
- stage: Build
  jobs:
  - job: BuildJob
    steps:
    - task: NuGetCommand@2
      inputs:
        command: 'restore'
        restoreSolution: '**/*.sln'
        feedsToUse: 'select'

    - task: VSBuild@1
      inputs:
        solution: '**/API.csproj'
        configuration: '$(BuildConfiguration)'
        msbuildArgs: '/p:OutputPath=$(Build.ArtifactStagingDirectory)/APIOutput'
        platform: 'any cpu'

    - task: VSBuild@1
      inputs:
        solution: '**/WebJob.csproj'
        configuration: '$(BuildConfiguration)'
        msbuildArgs: '/p:OutputPath=$(Build.ArtifactStagingDirectory)/WebJobOutput'
        platform: 'any cpu'

    - task: PublishBuildArtifacts@1
      inputs:
        pathtoPublish: '$(Build.ArtifactStagingDirectory)'
        artifactName: 'drop'
        publishLocation: 'Container'

- stage: Deploy
  dependsOn: Build
  jobs:
  - job: DeployJob
    steps:
    - download: current
      artifact: 'drop'

    - task: AzureRmWebAppDeployment@4
      inputs:
        ConnectionType: 'AzureRM'
        azureSubscription: '$(AzureSubscription)'
        appType: 'webApp'
        WebAppName: 'WebAppName'
        packageForLinux: '$(Pipeline.Workspace)/drop/APIOutput'

    - task: AzureRmWebAppDeployment@4
      inputs:
        ConnectionType: 'AzureRM'
        azureSubscription: '$(AzureSubscription)'
        appType: 'webApp'
        WebAppName: 'WebAppName'
        packageForLinux: '$(Pipeline.Workspace)/drop/WebJobOutput'
azure azure-devops azure-web-app-service azure-pipelines azure-webjobs

评论


答:

1赞 SiddheshDesai 11/18/2023 #1

我引用了 Rahul Nath 的这篇博客,并使用 Azure DevOps 生成和发布管道一起部署了 Azure Web 应用 + Azure WebJob,并将其部署在单个生成 YAML 管道中

请参阅我的 Github 存储库,该存储库引用自 Rahul Nath 的存储库以及我自己的 Azure YAML 管道,以在单个 yaml 管道中部署 Web 应用 + WebJob。

我在 Azure DevOps 存储库中推送了此存储库,然后构建了我的 Azure Web 应用 + Azure WebJob 解决方案,如下所示:-

我的构建 YAML 管道:-


trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'
    arguments: '--configuration Release'

- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: false
    projects: '**/WebJobExample.WebJob.csproj'
    arguments: '--output $(Build.BinariesDirectory)/publish_output/App_Data/jobs/continuous/YoutubeWebJob'
    zipAfterPublish: false
    modifyOutputPath: false

- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--output $(Build.BinariesDirectory)/publish_output'
    zipAfterPublish: false
    modifyOutputPath: false

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.BinariesDirectory)/publish_output'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

输出:-

enter image description here

现在,在发布管道中使用生成项目

在发布管道中选择上面的生成项目:-

enter image description here

在“阶段”中,选择“部署 Azure 应用服务”任务并添加所需的配置:-

我创建了一个 .Net 6.0 Windows Azure Web 应用程序,并在我的任务中选择了它,如下所示:-

enter image description here

在“部署 Azure 应用服务”步骤中,在“文件转换”步骤中添加了 **/appsettings.json,并保留了其余设置:-

enter image description here

添加了一个包含 AzureWebJobStorage 连接字符串的变量,该字符串是我的存储帐户的连接字符串: -

enter image description here

现在,我保存了管道并创建了一个版本:-

发布成功,Azure Web 应用 + Azure Web 作业已成功部署:-

输出:-

enter image description here

enter image description here

enter image description here

如果要在单个 YAML 管道中运行此代码,请参阅以下代码:-

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'
    arguments: '--configuration Release'

- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: false
    projects: '**/WebJobExample.WebJob.csproj'
    arguments: '--output $(Build.BinariesDirectory)/publish_output/App_Data/jobs/continuous/YoutubeWebJob'
    zipAfterPublish: false
    modifyOutputPath: false

- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--output $(Build.BinariesDirectory)/publish_output'
    zipAfterPublish: false
    modifyOutputPath: false

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.BinariesDirectory)/publish_output'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'


- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: 'xx subscription (xxxxxxxxxxxe97cb2a7)'
    appType: 'webApp'
    WebAppName: 'valleywebappjob'
    packageForLinux: '$(Agent.BuildDirectory)/**/*.zip'
    WebConfigParameters: '**/appsettings.json'

输出:-

enter image description here

评论

0赞 PointlessSpike 11/20/2023
将 WebJob 按指定方式放在应用数据文件夹中确实会导致 WebJob 显示在列表中。非常感谢。我已经旋转了一段时间,试图让它工作。