将管道拆分为构建和发布时,WebJob 不起作用
WebJob doesn't work when splitting pipeline into build and release
我正在尝试使用 Azure DevOps 部署 WebJob。我有以下管道:
pool:
# name: Hosted Windows 2019 with VS2019
vmImage: windows-2019
demands:
- msbuild
- visualstudio
- vstest
variables:
BuildPlatform: 'any cpu'
BuildConfiguration: 'release'
Parameters.solution: '**\*.sln'
steps:
- task: UseDotNet@2
displayName: 'Use Net Core 3.1.0'
inputs:
# packageType: 'runtime' # Options: runtime, sdk
packageType: 'sdk'
version: '3.1.100'
- task: NuGetToolInstaller@1
displayName: 'Use NuGet 5.7.0'
inputs:
versionSpec: 5.7.0
- task: NuGetCommand@2
displayName: 'NuGet restore'
inputs:
restoreSolution: '$(Parameters.solution)'
- task: DotNetCoreCLI@2
displayName: 'net build'
inputs:
command: 'build'
projects: '**\*.csproj'
arguments: '--configuration Release'
- task: DotNetCoreCLI@2
displayName: 'net publish'
inputs:
command: 'publish'
publishWebProjects: false
projects: '**\*.csproj'
arguments: '--output $(Build.ArtifactStagingDirectory)\WebJob\App_Data\jobs\continuous\WJ_Channel_Fetch'
zipAfterPublish: false
modifyOutputPath: false
- task: PowerShell@2
inputs:
targetType: 'inline'
script: '"dotnet WJ_Channel_Fetch.dll" | Out-File run.cmd -Encoding ASCII; $LASTEXITCODE'
errorActionPreference: 'stop'
failOnStderr: false
ignoreLASTEXITCODE: false
pwsh: false
workingDirectory: '$(Build.ArtifactStagingDirectory)\WebJob\App_Data\jobs\continuous\WJ_Channel_Fetch'
- task: AzureAppServiceManage@0
displayName: 'Stop Azure App Service: XXXX-pipelines2'
inputs:
azureSubscription: 'Visual Studio Professional (**********)'
Action: 'Stop Azure App Service'
WebAppName: 'XXXX-pipelines2'
- task: AzureRmWebAppDeployment@3
displayName: 'Azure App Service Deploy: XXXX-pipelines2'
inputs:
azureSubscription: 'Visual Studio Professional (**********)'
WebAppName: 'XXXX-pipelines2'
Package: '$(Build.ArtifactStagingDirectory)\WebJob'
TakeAppOfflineFlag: true
- task: AzureAppServiceManage@0
displayName: 'Start Azure App Service: XXXX-pipelines2'
inputs:
azureSubscription: 'Visual Studio Professional (**********)'
Action: 'Start Azure App Service'
WebAppName: 'XXXX-pipelines2'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
condition: succeededOrFailed()
这很完美,但我想将部署部分移动到发布管道,这样我就可以利用环境(DEV、QA、TEST、PROD)之间的批准。
问题是,当我将其移至发布管道时,WebJob 已部署,但似乎处于不一致状态。我无法阻止它,也无法删除它;摆脱它的唯一方法是删除 WebApp。
如果我只使用上面的 YAML,一切正常。
这是我的发布管道:
有什么想法吗?非常感谢!
这有很多部分,因为您的解决方案已经在 YAML 中运行并且您只是在批准后才离开,这也可以使用 YAML 轻松实现
您可以利用 Azure DevOps 的环境功能。在环境部分,您可以添加如下批准
Select各自的环境(你可以根据你的YAML手动创建相同的环境)
以上是解决方案之一。让我知道这个是否奏效。另一种解决方案是在发布管道
下使用部署方法
在这种情况下,您需要分别部署 Web 作业和实际代码
- 首先在wwwroot下部署web作业>>app_data>>job
- 然后将剩余的代码(如果与应用程序代码一起部署)部署到 wwwroot
一旦您需要在 Azure 应用服务中手动添加 Web 作业 post,它将直接与部署一起使用。
我在我的环境中以类似的方式工作并且工作正常
通过将 Azure App Service 部署任务降级到版本 3 解决了这个问题。*,这也是我的 YAML 文件和我使用 GUI 创建的发布管道之间的区别。
我仍然认为它应该适用于最新版本,但现在我已经解锁了。
我正在尝试使用 Azure DevOps 部署 WebJob。我有以下管道:
pool:
# name: Hosted Windows 2019 with VS2019
vmImage: windows-2019
demands:
- msbuild
- visualstudio
- vstest
variables:
BuildPlatform: 'any cpu'
BuildConfiguration: 'release'
Parameters.solution: '**\*.sln'
steps:
- task: UseDotNet@2
displayName: 'Use Net Core 3.1.0'
inputs:
# packageType: 'runtime' # Options: runtime, sdk
packageType: 'sdk'
version: '3.1.100'
- task: NuGetToolInstaller@1
displayName: 'Use NuGet 5.7.0'
inputs:
versionSpec: 5.7.0
- task: NuGetCommand@2
displayName: 'NuGet restore'
inputs:
restoreSolution: '$(Parameters.solution)'
- task: DotNetCoreCLI@2
displayName: 'net build'
inputs:
command: 'build'
projects: '**\*.csproj'
arguments: '--configuration Release'
- task: DotNetCoreCLI@2
displayName: 'net publish'
inputs:
command: 'publish'
publishWebProjects: false
projects: '**\*.csproj'
arguments: '--output $(Build.ArtifactStagingDirectory)\WebJob\App_Data\jobs\continuous\WJ_Channel_Fetch'
zipAfterPublish: false
modifyOutputPath: false
- task: PowerShell@2
inputs:
targetType: 'inline'
script: '"dotnet WJ_Channel_Fetch.dll" | Out-File run.cmd -Encoding ASCII; $LASTEXITCODE'
errorActionPreference: 'stop'
failOnStderr: false
ignoreLASTEXITCODE: false
pwsh: false
workingDirectory: '$(Build.ArtifactStagingDirectory)\WebJob\App_Data\jobs\continuous\WJ_Channel_Fetch'
- task: AzureAppServiceManage@0
displayName: 'Stop Azure App Service: XXXX-pipelines2'
inputs:
azureSubscription: 'Visual Studio Professional (**********)'
Action: 'Stop Azure App Service'
WebAppName: 'XXXX-pipelines2'
- task: AzureRmWebAppDeployment@3
displayName: 'Azure App Service Deploy: XXXX-pipelines2'
inputs:
azureSubscription: 'Visual Studio Professional (**********)'
WebAppName: 'XXXX-pipelines2'
Package: '$(Build.ArtifactStagingDirectory)\WebJob'
TakeAppOfflineFlag: true
- task: AzureAppServiceManage@0
displayName: 'Start Azure App Service: XXXX-pipelines2'
inputs:
azureSubscription: 'Visual Studio Professional (**********)'
Action: 'Start Azure App Service'
WebAppName: 'XXXX-pipelines2'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
condition: succeededOrFailed()
这很完美,但我想将部署部分移动到发布管道,这样我就可以利用环境(DEV、QA、TEST、PROD)之间的批准。
问题是,当我将其移至发布管道时,WebJob 已部署,但似乎处于不一致状态。我无法阻止它,也无法删除它;摆脱它的唯一方法是删除 WebApp。 如果我只使用上面的 YAML,一切正常。
这是我的发布管道:
有什么想法吗?非常感谢!
这有很多部分,因为您的解决方案已经在 YAML 中运行并且您只是在批准后才离开,这也可以使用 YAML 轻松实现
您可以利用 Azure DevOps 的环境功能。在环境部分,您可以添加如下批准
Select各自的环境(你可以根据你的YAML手动创建相同的环境)
以上是解决方案之一。让我知道这个是否奏效。另一种解决方案是在发布管道
下使用部署方法在这种情况下,您需要分别部署 Web 作业和实际代码
- 首先在wwwroot下部署web作业>>app_data>>job
- 然后将剩余的代码(如果与应用程序代码一起部署)部署到 wwwroot
一旦您需要在 Azure 应用服务中手动添加 Web 作业 post,它将直接与部署一起使用。 我在我的环境中以类似的方式工作并且工作正常
通过将 Azure App Service 部署任务降级到版本 3 解决了这个问题。*,这也是我的 YAML 文件和我使用 GUI 创建的发布管道之间的区别。
我仍然认为它应该适用于最新版本,但现在我已经解锁了。