You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET应用Elastic Beanstalk自动化部署失败(手动部署正常)

.NET Core API自动化部署Elastic Beanstalk失败:Command hooks failed

我尝试将.NET Core API自动化部署到现有Elastic Beanstalk(EB)环境,通过Visual Studio的AWS Toolkit手动发布完全正常,但用CodePipeline或GitHub Actions搭建CI/CD流水线时,在完成Added instance [i-0adf163e55a825fa9] to your environment.步骤后,总会出现相同错误:

06:10:39 ERROR: Error occurred during build: Command hooks failed
06:10:44 ERROR: [Instance: i-0adf163e55a825fa9 ConfigSet: Infra-EmbeddedPreBuild, Hook-PostInit, Hook-PreAppDeploy, Infra-EmbeddedPostBuild, Hook-EnactAppDeploy, Hook-PostAppDeploy, Infra-WriteVersionOnStartup] Command failed on instance. Return code: 1 Output: null.
06:10:44 INFO: Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
06:10:44 ERROR: Unsuccessful command execution on instance id(s) 'i-0adf163e55a825fa9'. Aborting the operation.
06:10:44 ERROR: Failed to deploy application.
06:10:45 ERROR: Deployment failed! Current State: Version: v-638557011188113073, Health: Yellow, Health Status: Warning

已尝试的操作:

  • 查看EB控制台最新100行日志及S3存储桶日志,未找到匹配错误时间的内容(已考虑时区)
  • 参考12篇ASP.NET Core流水线搭建指南,因内容过时、与AWS当前界面不符无法解决

GitHub Workflow配置

name: Deploy to Elastic Beanstalk

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: windows-2019
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3

      - name: Setup .NET
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: '6.0.x'

      - name: Build and Publish
        working-directory: ./API
        run: dotnet restore && dotnet publish -c Release -o publish --self-contained "true"

      - name: Create Deployment Package
        uses: thedoctor0/zip-release@0.7.6
        with:
          type: 'zip'
          filename: 'API.zip'
          path: |
            API\publish

      - name: Deploy to Elastic Beanstalk
        uses: einaregilsson/beanstalk-deploy@v22
        with:
          aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          application_name: AppName
          environment_name: EnvironmentName
          version_label: ${{ github.sha }}
          region: ${{ secrets.AWS_REGION }}
          deployment_package: API.zip

补充信息

按照建议尝试通过AWS CLI部署,API项目位于仓库独立文件夹,结构如下:

Repo  
│
└── API
│   │   API.csproj
|   |   API.sln
│   │   appsettings.json
|   |   aws-beanstalk-tools-defaults.json
|   |   web.config
|   |   etc.
│
└── Frontend project

执行以下AWS CLI(v2)命令,所有命令执行成功,但部署时EB事件日志仍出现相同错误:

dotnet publish -c Release -o ./publish
cd .\publish\
zip -r ../API.zip *
cd ..
aws s3 cp API.zip s3://my-s3-bucket-name/Backend/
aws elasticbeanstalk create-application-version --application-name EBAppName --version-label 1234567890 --source-bundle S3Bucket="my-s3-bucket-name",S3Key="Backend/API.zip"
aws elasticbeanstalk update-environment --environment-name EBAppNameEnv --version-label 1234567890

可能的原因及解决方法

1. 部署包结构不匹配

Visual Studio的AWS Toolkit会自动调整部署包结构,而手动打包或CI/CD流水线可能遗漏关键文件或目录层级错误:

  • 检查EB环境的平台配置:如果是Windows平台,部署包根目录应直接包含web.config、publish目录下的所有文件(而非嵌套在API/publish里)。
  • 调整GitHub Actions的打包步骤,确保以publish目录为打包根目录:
    - name: Create Deployment Package
      uses: thedoctor0/zip-release@0.7.6
      with:
        type: 'zip'
        filename: 'API.zip'
        directory: ./API/publish
    
  • 用AWS CLI打包时,在publish目录内执行zip -r ../API.zip .(用.而非*,避免遗漏隐藏文件)。

2. 自定义Hook脚本错误

EB的Command hooks failed通常是环境中存在的自定义部署钩子(.ebextensions下的脚本)执行失败:

  • 检查API项目根目录的.ebextensions文件夹,确保所有脚本语法正确、权限设置合理(Windows平台用.ps1脚本,Linux用.sh)。
  • 对比手动部署的包和CI/CD生成的包,确认.ebextensions目录是否被正确包含在部署包中。

3. 权限问题

CI/CD使用的AWS密钥权限不足,或EC2实例角色权限缺失:

  • 确保AWS密钥拥有elasticbeanstalk:*、目标S3存储桶的s3:*权限,或配置更精细的权限策略。
  • 检查EB环境的EC2实例角色(aws-elasticbeanstalk-ec2-role)是否包含AWSElasticBeanstalkWebTier等必要的托管策略。

4. 日志排查技巧

EB控制台的“最新100行日志”不够详细,需获取完整部署日志:

  • 在EB控制台环境页面,点击日志 -> 请求日志 -> 完整日志,下载后搜索Command hooks failed附近的详细输出,定位具体失败的钩子脚本和错误信息。
  • 登录EC2实例,查看C:\Program Files\Amazon\ElasticBeanstalk\logs(Windows)或/var/log/eb-engine.log(Linux)中的详细部署日志。

内容的提问来源于stack exchange,提问作者malthe.w

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:54:57