【问题标题】:VSTS AWS Elastic Beanstalk Deploy issueVSTS AWS Elastic Beanstalk 部署问题
【发布时间】:2019-11-06 23:53:33
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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 文件)

    编辑:添加有关要构建/部署的管道的详细信息

    对于我的部署过程,我使用 Build Pipeline 将项目打包到 zip 文件中(对于使用多个弹性 beanstalk 实例的某些项目来说是多个)。之后,我运行发布管道以将更改部署到 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 应用程序/环境。

    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'
    

    【讨论】:

    • 如何将这个额外的步骤集成到构建管道中?
    • @NovaDev 我添加了构建和发布管道步骤,用于将应用程序捆绑和部署到 AWS。我曾经在构建管道中将它们放在一起,但我将它们移动到 2 个单独的管道中,以便我在发布之前打包解决方案。我的应用程序名称和环境名称占位符可以替换为您当前在管道中使用的任何内容。
    • 谢谢你!我还有一张带有 AWS 的支持票,他们指出了我 docs.aws.amazon.com/elasticbeanstalk/latest/dg/…,但他们说它需要用于任何 dotnet 项目,而不仅仅是 dotnet 核心。
    • 后续部分 2:这完全有效。我不得不修改一些设置,比如“$(shared.environmentExtension)”在我的设置中没有做任何事情,而且我不理解 _CSI Build 发布管道中的下划线,但基本上,我得到了它工作。我没有意识到 Azure 可以进行超级基本的复制和压缩操作,这使得其余部分变得更有意义。
    • 很高兴这可以帮助你。亚马逊对我也没有帮助。为了将来参考,构建管道中格式为$(somename) 的任何内容都是构建变量。这些对于我的构建来说是独一无二的,能够在项目之间移植此构建序列,并将其与不同的变量一起用于不同的应用程序/环境。 _CSI Build 块只是发布管道在从我的构建管道中拉入放置文件时使用的位置。
    猜你喜欢
    • 2019-11-22
    • 2014-05-26
    • 2015-09-20
    • 2020-08-02
    • 2014-12-25
    • 2017-04-11
    • 2015-12-15
    • 1970-01-01
    • 2017-12-30
    相关资源
    最近更新 更多