弹性 Beanstalk 命令行界面部署 jar

4

我卡在Beanstalk了。希望你们可以给我一点帮助。我能够通过Web界面上的“上传和部署”窗口部署Spring Boot fatjar。我的问题是如何通过CLI部署jar?我有一个Atlassian Bamboo,当有人合并到主分支时自动构建,并希望通过EB CLI自动部署构建的jar文件。


1
但问题仍然存在,如何使用eb cli部署jar文件。 - devdanke
@devdanke 现在已经回答了! - Kashyap
2个回答

1
这听起来像是使用CodePipeline的完美场景,CodePipeline是AWS免费的CI/CD解决方案。
当Bamboo完成构建后,您可以告诉它将构建产物上传到S3存储桶中。具体说明可以在这里找到:https://confluence.atlassian.com/bamkb/how-to-automatically-archive-build-artifacts-to-amazon-s-s3-storage-707625682.html 要设置您的CodePipeline,您需要在GUI中选择S3作为源。提供所有必要的存储桶细节并给结果产物命名,然后单击下一步。对于下一步,您将跳过构建步骤,选择“无构建”(这将由Bamboo完成),直接进入Beta(即部署)阶段。您将选择ElasticBeanstalk作为部署提供程序,并选择输入产物作为第一步中创建的产物名称。就这样。

这里正在发生什么?当您在Master上提交或合并时,会在Bamboo触发构建过程,这很好。当Bamboo完成后,它将上传生成的artifact,即fatjar文件,到我们指定的S3存储桶中。我们已经告诉CodePipeline监视该存储桶的更改,当检测到更改时,CodePipeline将获取fatjar文件,创建相应的CodePipeline artifact,并将其传递给ElasticBeanstalk进行处理。ElasticBeanstalk接收CodePipeline artifact并根据配置文件中的设置进行处理。


太感谢了!它运行得很完美。 :) 安装和使用都非常简单。 - Lakatos Gyula

1

这是我在.bash_profile中使用的一个小函数,可以让我从shell部署新的jars。在积极开发期间非常有用。

function update_eb_jar() {
    f=${FUNCNAME[0]}
    app_name=$1
    jar_path=$2
    [ -z $3 ] && profile=default || profile=$3
    if [[ $# -ne 2 ]] && [[ $# -ne 3 ]]; then
        cat << EO_USAGE
    usage:
        $f app-name jar-path [aws-profile-name]
    e.g.
        $f eb-api-kashyap target/api*.jar
        $f eb-api-preprod target/api*.jar preprod
EO_USAGE
        return
    fi

    app_version="update_eb_jar_$(date +%Y%m%d_%H%M)"
    eb_env_name=`aws --profile $profile elasticbeanstalk describe-environments --application-name $app_name | sed -n '/"EnvironmentName"/s/^[^"]*"EnvironmentName": "\([^"]\+\)",.*$/\1/p'`
    jar_name=`basename $jar_path`
    echo "uploading jar $jar_path to s3://kashyap-east1/$jar_name"
    aws --profile $profile s3 cp $jar_path s3://kashyap-east1/$jar_name
    echo "creating app version $app_version for app $app_name"
    aws --profile $profile elasticbeanstalk create-application-version --application-name $app_name --version-label $app_version \
                   --source-bundle S3Bucket=kashyap-east1,S3Key=$jar_name
    echo "updating environment: $eb_env_name"
    aws --profile $profile elasticbeanstalk update-environment --environment-name $eb_env_name --version-label $app_version
}

假设环境名称是唯一的,如果不是,则需要将应用程序名称传递给update-environment

你帮助我更好地理解了AWS CLI用于s3和elasticbeanstalk。谢谢。 - devdanke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接