Elastic Beanstalk,Docker和持续集成

我有一个使用Docker的beanstalk环境。

每当我推动一些东西,jenkinsbuild立和上传我的新快照到S3。 (我用S3来存储我的版本)。 每个版本都是一个包含我的应用程序和我的Dockerfile的zip文件。

然后我用刚刚上传的版本更新我的BS环境(BS创build一个新版本,上传到S3版本,如果版本存在,replace它,它用于快照)。

一切正常,我第一次部署版本。 但是当我第二次做,它继续工作,但似乎我的最后一个版本没有被使用。 Docker不能重build我刚刚更新的应用程序。

为什么这个 ? 我错过了什么吗? 这是我的Dockefile

基本上看来,更新环境调用拒绝更新相同的版本号 – 这就是为什么我们总是依靠${maven.build.timestamp}和朋友。 这是你的修饰pom:]

注意我使用的属性 – 这是最新版本的build议风格(哎呀,有人忘了更新文档)。

我决定尝试使用最新的1.4.0-SNAPSHOT。 以下是您应该添加到您的个人资料中的内容:

 <profiles> <profile> <id>awseb</id> <properties> <maven.deploy.skip>true</maven.deploy.skip> <beanstalker.region>eu-west-1</beanstalker.region> <beanstalk.applicationName>wisdom-demo</beanstalk.applicationName> <beanstalk.cnamePrefix>wisdom-demo</beanstalk.cnamePrefix> <beanstalk.environmentName>${beanstalk.cnamePrefix}</beanstalk.environmentName> <beanstalk.artifactFile>${project.basedir}/target/${project.build.finalName}.zip</beanstalk.artifactFile> <beanstalk.environmentRef>${beanstalk.cnamePrefix}.elasticbeanstalk.com</beanstalk.environmentRef> <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format> <beanstalk.s3Key>apps/${project.artifactId}/${project.version}/${project.artifactId}-${project.version}-${maven.build.timestamp}.zip</beanstalk.s3Key> <beanstalk.useLatestVersion>true</beanstalk.useLatestVersion> <beanstalk.versionLabel>${project.artifactId}-${project.version}-${maven.build.timestamp}</beanstalk.versionLabel> <beanstalk.applicationHealthCheckURL>/ping</beanstalk.applicationHealthCheckURL> <beanstalk.instanceType>m1.small</beanstalk.instanceType> <beanstalk.keyName>aldrin@leal.eng.br</beanstalk.keyName> <beanstalk.iamInstanceProfile>aws-elasticbeanstalk-ec2-role</beanstalk.iamInstanceProfile> <beanstalk.solutionStack>64bit Amazon Linux 2014.* running Docker 1.*</beanstalk.solutionStack> <beanstalk.environmentType>SingleInstance</beanstalk.environmentType> </properties> <build> <plugins> <plugin> <groupId>br.com.ingenieux</groupId> <artifactId>beanstalk-maven-plugin</artifactId> <version>1.4.0-SNAPSHOT</version> <executions> <execution> <id>default-deploy</id> <phase>deploy</phase> <goals> <goal>upload-source-bundle</goal> <goal>create-application-version</goal> <goal>put-environment</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> 

从上面的例子,只需调整你的cnamePrefix和最新的三个属性。 这里是一个简要说明:

所以如果你想部署,简单地说:

$ mvn -Pawseb部署

或者,如果你想启动它

从头开始部署最新版本(因此使用useLatestVersion),只需执行以下操作:

$ mvn -Pawseb -Dbeanstalk.versionLabel = beanstalk:create-environment

通过将versionLabel设置为空白,可以有效地激活useLatestVersion行为:当没有版本时,使用最新版本。

哦,部署失败?

十分简单:

$ mvn -Pawseb beanstalk:回滚版本

感谢您的解释和链接到博客文章。 我遵循这些一步一步的指示,并成功地将我的第一个Wisdom应用程序部署到AWS Elastic Beanstalk上的Docker容器中。

在这里输入图像说明

然后,我升级Java源代码,使用mvn package进行编译,在本地进行testing,并使用AWS Console再次部署新的ZIP文件。

我的AWS Elastic BeansTalk环境已正确更新。

在这里输入图像说明

因此,您所看到的部署问题看起来像位于部署代码的Maven AWS Elastic Beanstalk插件中。 手动部署正常工作。 由于这个maven插件是第三方,开源项目,我不是调查这个问题的合适人选。 我build议你联系项目维护者和/或在他们的问题跟踪系统中打开一个问题

作为一种解决方法,您可以手动部署(或者从您的CI / CD环境脚本执行此过程):

  1. 将您的制品复制到您的AWS Elastic Beanstalk存储桶

aws s3 --region <REGION_NAME> cp ./target/YOUR_ARTIFACTID-1.0-SNAPSHOT.zip s3://<YOUR_BUCKET_NAME>/20141128-210900-YOUR_ARTIFACTID-1.0-SNAPSHOT.zip

  1. 用你的zip文件创build一个应用程序版本

aws elasticbeanstalk create-application-version --region <REGION_NAME> --application-name <YOUR_APPLICATION_NAME> --version-label 20141128-212100 --source-bundle S3Bucket=<YOUR_BUCKET_NAME>,S3Key=20141128-210900-YOUR_ARTIFACTID-1.0-SNAPSHOT.zip

  1. 部署该版本

aws elasticbeanstalk update-environment --region <YOUR_REGION_NAME> --environment-name <YOUR_ENVIRONMENT_NAME> --version-label 20141128-212100

这三个步骤可能是从maven或jenkins自动化,我会让你作为一个练习:-)