VSTS AWS Elastic Beanstalk 部署问题

VSTS AWS Elastic Beanstalk Deploy issue

我试图在 Azure DevOps 上创建一个 automated 发布管道,它应该构建我的应用程序并将其部署到我的 AWS Elastic Beanstalk 服务器。我正在使用推荐的 AWS Elastic Beanstalk 部署任务来执行此操作。它非常适合我的 .NET Core 应用程序,但它一直将我的标准 .NET 应用程序放在服务器上名称为 {ProjectName}_deploy 的子文件夹中。

我正在使用 standard VS 2017 构建和 package 命令集,所以它使用的是标准构建过程创建的 zip 文件,但我一直无法弄清楚为什么它想要在子文件夹中创建一个新应用程序,而不是像我使用 Visual Studio deployment tool.

时那样将其放置在主默认网站文件夹中

经过大量研究和尝试修复后,我发现修复是为了向 AWS 提供清单。

aws-windows-部署-manifest.json

{
  "manifestVersion": 1,
  "deployments": {
    "msDeploy": [
      {
        "name": "service",
        "parameters": {
          "appBundle": "CSI.Service.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}

此文件必须放置在 zip 层次结构中,如下所示:

  • 压缩上传
    • aws-windows-部署-manifest.json
    • CSI.Service.zip(来自构建的应用程序部署 zip 文件)

编辑:将有关管道的详细信息添加到 build/deploy

对于我的部署过程,我使用构建管道将项目打包到 zip 文件中(对于使用多个弹性 beantalk 实例的某些项目来说是多个)。之后,我 运行 一个发布管道将更改部署到 Elastic Beanstalk

构建管道

在构建管道中,我基本上构建了解决方案,将 Web API 打包成一个 zip 文件,将 zip 文件和 AWS 清单文件一起复制到一个文件夹中,然后将它们压缩到建立下降区。同样重要的是要注意清单文件的名称很重要,因为它必须与亚马逊期望的名称相匹配。否则,它将被忽略。确保将存档任务设置为不将根文件夹名称添加到存档路径也很重要。

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 application/environment。

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'