#azure-devops #azure-pipelines
Вопрос:
У нас есть конвейер Azure DevOps, работающий на самодостаточном сервере без параллелизма, который не выполняет задание или этап развертывания.
Версия, которую я публикую ниже, будет состоять из двух этапов, но обратите внимание, что я попытался это сделать, удалив второй этап и преобразовав весь этап в задание, и все равно результат тот же. Я также должен отметить, что у меня есть несколько конвейеров с несколькими заданиями, которые работают просто отлично, похоже, это проблема с конкретным заданием развертывания.
Второй этап навсегда застрял в ожидании («Задание находится в ожидании»). Он никогда не начнет работать.
Сцена также не может быть отменена, и, согласно изображению выше, она застряла на 2 месяца. Я также должен отметить, что я отправил это в сообщество разработчиков Azure по адресу developercommunity.visualstudio.com, но я думаю, что они отказались от моего билета.
Я уверен, что в Azure DevOps есть много успешных развертываний CI/CD, я просто не могу сказать, что я здесь делаю не так. Я использую рабочий метод в наших отдельных конвейерах выпуска, которые мы запускаем вручную.
Ниже приведен затронутый трубопровод, любые рекомендации будут высоко оценены.
trigger: none
variables:
ArtifactPackageName: 'app.zip'
DeploySite.IISDeploymentType: 'IISWebsite'
DeploySite.ActionIISWebsite: 'CreateOrUpdateWebsite'
DeploySite.WebsiteName: 'REDACTED'
DeploySite.WebsitePhysicalPath: '%SystemDrive%inetpubwwwrootREDACTED'
DeploySite.AddBinding: false
DeploySite.VirtualPathForApplication: '/REDACTED'
DeploySite.AppPoolName: 'REDACTED'
DeploySite.VirtualApplication: 'REDACTED'
DeploySite.Package: $(Pipeline.Workspace)/drop/$(ArtifactPackageName)
DeploySite.RemoveAdditionalFilesFlag: true
DeploySite.TakeAppOfflineFlag: true
DeploySite.XmlTransformation: false
DeploySite.XmlVariableSubstitution: true
DeploySite.SetParametersFile: $(Pipeline.Workspace)/drop/REDACTED.SetParameters.xml
DeploySite.JSONSettingsFiles: '**/appsettings.json'
stages:
- stage: 'Build'
displayName: 'Build'
jobs:
- job: 'Build'
displayName: 'Build'
pool:
name: REDACTED
variables:
Solution: '**/*.sln'
BuildPlatform: 'Any CPU'
BuildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
displayName: 'Install NuGet Tools'
- task: NuGetCommand@2
displayName: 'Restore NuGet Packages'
inputs:
restoreSolution: '$(Solution)'
- task: VSBuild@1
displayName: 'MSBuild'
inputs:
solution: '$(Solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=false /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(Build.ArtifactStagingDirectory)$(ArtifactPackageName)"'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Build Artifacts'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: drop
publishLocation: 'Container'
- stage: 'Deploy'
displayName: 'Deploy'
dependsOn: 'Build'
jobs:
- deployment: 'Deploy'
displayName: 'Deploy'
continueOnError: false
timeoutInMinutes: 10
workspace:
clean: all
pool:
name: REDACTED
environment:
name: SERVER-DEV
resourceType: VirtualMachine
strategy:
runOnce:
deploy:
steps:
- download: current
displayName: 'Download Artifact'
artifact: drop
- task: IISWebAppManagementOnMachineGroup@0
displayName: 'Stop IIS App Pool'
continueOnError: false
inputs:
IISDeploymentType: IISApplicationPool
ActionIISApplicationPool: StopAppPool
StartStopRecycleAppPoolName: '$(Parameters.WebsiteName)'
- task: IISWebAppDeploymentOnMachineGroup@0
displayName: 'IIS Web App Deploy'
continueOnError: false
inputs:
WebSiteName: '$(DeploySite.WebsiteName)'
VirtualApplication: '$(DeploySite.VirtualApplication)'
Package: '$(DeploySite.Package)'
RemoveAdditionalFilesFlag: $(DeploySite.RemoveAdditionalFilesFlag)
SetParametersFile: $(DeploySite.SetParametersFile)
TakeAppOfflineFlag: $(DeploySite.TakeAppOfflineFlag)
XmlTransformation: $(DeploySite.XmlTransformation)
XmlVariableSubstitution: $(DeploySite.XmlVariableSubstitution)
JSONFiles: $(DeploySite.JSONSettingsFiles)
- task: IISWebAppManagementOnMachineGroup@0
displayName: 'Start IIS App Pool'
continueOnError: true
inputs:
IISDeploymentType: IISApplicationPool
ActionIISApplicationPool: StartAppPool
StartStopRecycleAppPoolName: '$(Parameters.WebsiteName)'
Комментарии:
1. Если задание не было запущено, похоже, оно ожидает доступного агента. Вы уверены, что в вашем пуле есть хотя бы один свободный агент?
2. Я уверен. У нас есть только один агент, но я могу продолжать ставить задачи в очередь на этом агенте снова и снова, и они будут выполняться и выполняться просто отлично.
3. У меня точно такая же проблема, но нет упоминания о ключевом слове «развернуть» или о чем-то подобном
Ответ №1:
У меня была та же ошибка. Я переименовался - deployment: Deploy
в - deployment: Deployment
…и это начало работать.
Комментарии:
1. Я… я не нахожу слов. Я думал, что этот раздел предназначен для названия. Сейчас это работает, просто отлично. Большое вам за это спасибо!
2. Я нашел ссылку на «развертывание» в качестве ключевого слова в документах, а также ссылку в часто задаваемых вопросах
Ответ №2:
Я столкнулся с той же ошибкой на этапе только с заданием развертывания.
Успешным обходным решением является замена задания развертывания на обычное задание. Однако этот подход не сохранит историю развертывания и не позволит разработать стратегию развертывания.
В вашем случае Deploy
это было бы:
- stage: 'Deploy'
displayName: 'Deploy'
dependsOn: 'Build'
jobs:
- job: 'Deploy'
displayName: 'Deploy'
continueOnError: false
timeoutInMinutes: 10
workspace:
clean: all
pool:
name: REDACTED
steps:
- download: current
displayName: 'Download Artifact'
artifact: drop
- task: IISWebAppManagementOnMachineGroup@0
displayName: 'Stop IIS App Pool'
continueOnError: false
inputs:
IISDeploymentType: IISApplicationPool
ActionIISApplicationPool: StopAppPool
StartStopRecycleAppPoolName: '$(Parameters.WebsiteName)'
- task: IISWebAppDeploymentOnMachineGroup@0
displayName: 'IIS Web App Deploy'
continueOnError: false
inputs:
WebSiteName: '$(DeploySite.WebsiteName)'
VirtualApplication: '$(DeploySite.VirtualApplication)'
Package: '$(DeploySite.Package)'
RemoveAdditionalFilesFlag: $(DeploySite.RemoveAdditionalFilesFlag)
SetParametersFile: $(DeploySite.SetParametersFile)
TakeAppOfflineFlag: $(DeploySite.TakeAppOfflineFlag)
XmlTransformation: $(DeploySite.XmlTransformation)
XmlVariableSubstitution: $(DeploySite.XmlVariableSubstitution)
JSONFiles: $(DeploySite.JSONSettingsFiles)
- task: IISWebAppManagementOnMachineGroup@0
displayName: 'Start IIS App Pool'
continueOnError: true
inputs:
IISDeploymentType: IISApplicationPool
ActionIISApplicationPool: StartAppPool
StartStopRecycleAppPoolName: '$(Parameters.WebsiteName)'
Комментарии:
1. Это выглядит хорошо, но как указать среду (виртуальную машину или ресурс) для развертывания? Я вижу, что свойство среды было недопустимым в задачах.
2. К сожалению, я также не смог найти способ настроить окружающую среду. В моем случае это не было препятствием, но я понимаю, что это реальный недостаток.