Что я пытаюсь сделать?
Создайте один файл YAML, который создает и развертывает службу как веб-задание внутри местоположения веб-заданий в расположении веб-заданий службы приложений.
У меня есть один YAML-код, который создает и развертывает консольное приложение рабочей службы в качестве веб-задания Azure в службе приложений.
Сборка прошла успешно, и развертывание также прошло успешно, однако веб-задание не размещается в нужном месте.
Я хочу, чтобы это было развернуто внутри сайта-> задания -> непрерывное-> имя веб-задания, но оно развертывается в сайт-> wwwroot-> имя веб-задания.
trigger:
branches:
include:
- main
paths
include:
- MyTestJobJob/MyTestJobService.cs
pool:
vmImage: 'windows-latest'
variables:
buildConfiguration: 'Release'
devWebAppName: 'MyTestJobJobDev'
resourceGroupName: 'MyRG'
webJobName: 'MyTestJobJob'
stages:
- stage: Build
jobs:
- job: Build
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.x'
installationPath: $(Agent.ToolsDirectory)/dotnet
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
projects: 'MyTestJobJob/MyTestJobJob.csproj'
arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/publish_output/App_Data/jobs/continuous/$(webJobName)'
publishWebProjects: false
modifyOutputPath: false
zipAfterPublish: false
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
projects: 'MyTestJobJob/MyTestJobJob.csproj'
arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/publish_output'
publishWebProjects: false
modifyOutputPath: false
zipAfterPublish: false
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(Build.ArtifactStagingDirectory)'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/MyTestJobJob.zip'
replaceExistingArchive: true
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/MyTestJobJob.zip'
ArtifactName: 'drop'
publishLocation: 'Container'
- stage: DeployToDev
dependsOn: Build
jobs:
- deployment: DeployToDev
environment: 'Dev'
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: drop
- task: AzureWebApp@1
inputs:
azureSubscription: 'MyAZSubscription' # Pushes changes to the webjob
appName: '$(devWebAppName)'
package: '$(Pipeline.Workspace)/drop/MyTestJobJob.zip'
resourceGroupName: '$(resourceGroupName)'
webJobName: '$(webJobName)'
webJobType: 'Continuous'
publishWebProjects: false
Я думаю, что изменение должно произойти в этой строке, но я не уверен, что нужно изменить, чтобы перейти в правильное расположение веб-задания Azure.
arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/publish_output/App_Data/jobs/continuous/$(webJobName)'
Если я вручную добавлю новое веб-задание в веб-задания Azure в службе приложений и прикреплю zip-файл артефакта, запустится веб-задание, которое я пытаюсь автоматизировать.
Чтобы развернуть веб-задание в целевом расположении, вам необходимо убедиться, что zip-файл (MyTestJobJob.zip) в артефакте имеет правильную структуру папок, App_Data/jobs/continuous
для continuous
типа.
Образец артефакта на моей стороне для справки:
Для вашего результата артефакта yaml в пути будут дополнительные publish_output
и дополнительные файлы в zip-архиве.
Чтобы исправить структуру zip-файла, измените местоположение $(Build.ArtifactStagingDirectory)
в аргументе публикации на $(Build.BinariesDirectory)
и исправьте корневую папку для задачи ArchiveFiles@2.
Образец, как показано ниже:
trigger:
branches:
include:
- main
paths:
include:
- MyTestJobJob/MyTestJobService.cs
pool:
vmImage: 'windows-latest'
variables:
buildConfiguration: 'Release'
devWebAppName: 'MyTestJobJobDev'
resourceGroupName: 'MyRG'
webJobName: 'MyTestJobJob'
stages:
- stage: Build
jobs:
- job: Build
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.x'
installationPath: $(Agent.ToolsDirectory)/dotnet
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
projects: 'MyTestJobJob/MyTestJobJob.csproj'
arguments: '--configuration $(buildConfiguration) --output $(Build.BinariesDirectory)/publish_output/App_Data/jobs/continuous/$(webJobName)'
publishWebProjects: false
modifyOutputPath: false
zipAfterPublish: false
# - task: DotNetCoreCLI@2
# inputs:
# command: 'publish'
# projects: 'MyTestJobJob/MyTestJobJob.csproj'
# arguments: '--configuration $(buildConfiguration) --output $(Build.BinariesDirectory)/publish_output'
# publishWebProjects: false
# modifyOutputPath: false
# zipAfterPublish: false
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(Build.BinariesDirectory)/publish_output'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/MyTestJobJob.zip'
replaceExistingArchive: true
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Я прокомментировал вторую задачу публикации, добавьте ее обратно, если она вам нужна.
Кроме того, для задачи развертывания AzureWebApp@1
нет параметров webJobName
, webJobType
, publishWebProjects
, но appType
необходим.
- task: AzureWebApp@1
inputs:
azureSubscription: 'MyAZSubscription'
appType: 'webApp'
appName: '$(devWebAppName)'
package: '$(Pipeline.Workspace)/drop/MyTestJobJob.zip'
deploymentMethod: 'auto'
Пожалуйста, проверьте мой еще один ответ в аналогичном билете для справки.