我尝试在automated
上创建一个Azure DevOps
发布管道,该管道应将应用程序构建并部署到我的AWS Elastic Beanstalk服务器。我正在使用推荐的AWS Elastic Beanstalk
部署任务来执行此操作。它对.NET Core应用程序非常有效,但已将我的标准.NET
应用程序放在服务器上名称为{ProjectName}_deploy
的子文件夹中。
我正在使用带有打包命令集的standard VS 2017
构建,因此它使用的是由标准构建过程创建的zip
文件,但是我一直无法弄清为什么要创建它在子文件夹中创建一个新应用程序,而不是像使用Visual Studio deployment tool
时那样将其放置在默认的主要Web站点文件夹中。
答案 0 :(得分:1)
经过大量研究并尝试了修复,我发现该修复是为AWS提供清单。
{
"manifestVersion": 1,
"deployments": {
"msDeploy": [
{
"name": "service",
"parameters": {
"appBundle": "CSI.Service.zip",
"iisPath": "/"
}
}
]
}
}
此文件必须放在zip层次结构中,如下所示:
对于我的部署过程,我使用构建管道将项目打包为zip文件(对于使用多个弹性beantalk实例的某些项目则为zip文件)。之后,我运行发布管道将更改部署到Elastic Beanstalk
在构建管道中,我基本上构建了解决方案,该解决方案将Web API打包到一个zip文件中,将该zip文件和AWS清单文件一起复制到一个文件夹中,然后将它们压缩到构建放置区域中。还需要注意的是,清单文件的名称很重要,因为它必须与Amazon期望的名称匹配。否则,它将被忽略。确保您将“存档”任务设置为不将根文件夹名称放在存档路径之前也很重要。
steps:
- task: VSBuild@1
displayName: 'Build solution **\*.sln $(BuildConfiguration)'
inputs:
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
clean: true
steps:
- task: CopyFiles@2
displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)\eb-deploy\'
inputs:
SourceFolder: '$(Build.SourcesDirectory)\CSI.Service'
Contents: 'aws-windows-deployment-manifest.json'
TargetFolder: '$(Build.ArtifactStagingDirectory)\eb-deploy\'
steps:
- task: CopyFiles@2
displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)\eb-deploy\'
inputs:
SourceFolder: '$(Build.ArtifactStagingDirectory)'
Contents: CSI.Service.zip
TargetFolder: '$(Build.ArtifactStagingDirectory)\eb-deploy\'
steps:
- task: ArchiveFiles@2
displayName: 'Archive $(Build.ArtifactStagingDirectory)\eb-deploy\'
inputs:
rootFolderOrFile: '$(Build.ArtifactStagingDirectory)\eb-deploy\'
includeRootFolder: false
archiveFile: '$(Build.ArtifactStagingDirectory)/drop/Service/eb-deploy-service-$(shared.environmentExtension).zip'
发布管道仅从构建中获取创建的zip文件,并将其推送到相应的AWS Elastic Beanstalk应用程序/环境。
steps:
- task: AmazonWebServices.aws-vsts-tools.BeanstalkDeployApplication.BeanstalkDeployApplication@1
displayName: 'Deploy to Elastic Beanstalk: $(service.environmentName)$(shared.environmentExtension)'
inputs:
awsCredentials: 'My AWS'
regionName: 'us-east-1'
applicationName: '$(service.applicationName)'
environmentName: '$(service.environmentName)$(shared.environmentExtension)'
webDeploymentArchive: '$(System.DefaultWorkingDirectory)\_CSI Build\drop\Service\eb-deploy-service-$(shared.environmentExtension).zip'