amazon-web-services - Elastic Beanstalk,Docker和持续集成

标签 amazon-web-services jenkins amazon-s3 docker amazon-elastic-beanstalk

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

每次我推送内容时,jenkins都会构建新快照并将其上传到S3。 (我使用S3来存储我的版本)。每个版本都是一个zip,其中包含我的应用程序和Dockerfile。

然后,我用刚刚上传的版本更新BS环境(BS创建一个新版本,并将该版本上传到S3,如果存在该版本,请替换为它,这对于快照很有用)。

第一次部署版本时,一切正常。
但是当我第二次这样做时,它仍然可以正常工作,但似乎没有使用我的最新版本。 Docker不会重新构建我的最新更新的应用程序。

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

最佳答案

基本上,似乎update-environment调用拒绝更新相同的版本号-这就是为什么我们始终依赖${maven.build.timestamp}和 friend 的原因。这是您修饰过的pom:]

注意,我正在使用属性-这就是最新版本的建议样式(糟糕,有人忘记更新文档了)。

我决定尝试使用最新的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 beantalk:回滚版本

关于amazon-web-services - Elastic Beanstalk,Docker和持续集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27185671/

相关文章:

java - Selenium Grid+TestNG+Maven+pom.xml

node.js - 使用 aws lambda nodejs 从 SFTP 服务器访问和复制文件

database - CouchDB 和 Amazon S3 的通用接口(interface)

amazon-web-services - 将 CloudFront 分配与 Route 53 域相关联时出现问题

amazon-web-services - 从 Lambda 访问 ElasticSearch 的权限?

node.js - 尽管我使用 Npm 步骤配置为使用自定义 .nrpmrc 文件,但 npm 安装在 Jenkins 管道中失败

c# - 使用 C# 从 S3 Bucket 下载对象

amazon-web-services - AWS Cognito 用户池应用程序客户端中的设置意味着什么

node.js - Docker 构建 npm 错误日志

java - Jenkins/Maven 增量构建问题