VSTS AWS Elastic Beanstalk Deploy问题

时间:2019-01-15 19:34:10

标签: amazon-web-services azure-devops amazon-elastic-beanstalk azure-pipelines-release-pipeline

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

我正在使用带有打包命令集的standard VS 2017构建,因此它使用的是由标准构建过程创建的zip文件,但是我一直无法弄清为什么要创建它在子文件夹中创建一个新应用程序,而不是像使用Visual Studio deployment tool时那样将其放置在默认的主要Web站点文件夹中。

1 个答案:

答案 0 :(得分:1)

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

aws-windows-deployment-manifest.json

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

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

  • 要上传的邮政编码
    • aws-windows-deployment-manifest.json
    • CSI.Service.zip(来自构建的应用程序部署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'