ElasticBeanstalk错误“应用程序版本不可用,不能用于环境”是什么意思?

我试图使用AWS-cli工具将.NET应用程序部署到ElasticBeanstalk。

首先上传然后创build版本使用:

aws elasticbeanstalk create-application-version --application-name "MyApp - DEV" --version-label "0.1.165" --source-bundle S3Bucket="xxx",S3Key="MyApp.0.1.165.zip" --process 

这工作,所以下一步:

 aws elasticbeanstalk update-environment --environment-name "myapp-dev-env" --version-label "0.1.165" --application-name "MyApp - DEV" 

有时这会退出代码255并输出:

调用UpdateEnvironment操作时发生客户端错误(InvalidParameterValue):应用程序版本不可用,不能与环境一起使用

令人沮丧的是,这些确切的步骤(由我的持续集成服务器运行)有时可以工作,如果我使用AWS控制台部署此版本,它也可以工作。 我正在上传的zip没有出现任何不同,事实上,如果我从相同的源版本(使用之前部署成功的版本,这给它一个新版本号)重build,它似乎(通常)运行进入这个问题。

我找不到有关这个错误意味着什么的任何细节,那么我还能在哪里找出发生了什么?

问题是由于未能等待新版本“处理”而导致的。

create-application-version命令返回:

  [Exec] { [Exec] "ApplicationVersion": { [Exec] "ApplicationName": "MyApp - DEV", [Exec] "Status": "PROCESSING", [Exec] "VersionLabel": "0.1.165", [Exec] "DateCreated": "2016-04-19T19:27:35.948Z", [Exec] "DateUpdated": "2016-04-19T19:27:35.948Z", [Exec] "SourceBundle": { [Exec] "S3Bucket": "xxx", [Exec] "S3Key": "MyApp.0.1.165.zip" [Exec] } [Exec] } [Exec] } 

我放了3秒的延迟,然后运行describe-application-versions ,并得到了

  [Exec] "Status": "PROCESSED", 

(有趣的是, DateUpdated没有改变)

之后, update-environment命令正常工作,我已经部署了几个版本没有问题。


正确的解决办法是继续运行describe-application-versions直到Status!=“Processing”,然后处理所有的失败情况(“Processing”或“Processed”状态或永远保留为“Processing”状态)。

在我的情况下,我从msbuild(在那里循环和等待是非常困难的)调用这个,所以我很高兴与任意延迟的解决方法,并允许update-environment命令失败,如果出现问题。 由于生产在update-environment之前一直保持不变,并且实际部署时间(通向该命令)并不重要,所以我不需要花费太多的精力。