1

我正在使用 AWS 代码部署代理并通过 bitbucket 插件将我的项目部署到服务器。

代码部署代理首先执行脚本文件,其中包含执行我的 spring-boot 项目的命令。

因为我有两个环境一个开发和另一个生产。我希望脚本根据环境(即两个不同的实例)做不同的事情。

我的计划是获取映射的 aws 静态 IP 地址并从中确定环境(生产或阶段)。

如何通过 sh 命令获取弹性 IP 地址。

已编辑

4

4 回答 4

2

静态 IP 将起作用。

这是解决此问题的更自然的 CodeDeploy 方法 - 设置 2 个 CodeDeploy 部署组,一个用于您的开发环境,另一个用于您的生产环境。然后在您的脚本中,您可以使用 CodeDeploy 在部署期间设置的环境变量来了解您要部署到哪个环境。

这是一篇关于如何使用 CodeDeploy 环境变量的博客文章:https ://aws.amazon.com/blogs/devops/using-codedeploy-environment-variables/

于 2018-06-08T23:15:57.577 回答
1

您可以执行以下操作:

id=$( curl http://169.254.169.254/latest/meta-data/instance-id )
eip=$( aws ec2 describe-addresses --filter Name=instance-id,Values=${id} | aws ec2 describe-addresses | jq .Addresses[].PublicIp --raw-output )

以上instance-id从元数据中获取,然后使用从元数据aws cli中查找由 id 过滤的弹性 IP。jq然后可以使用此输出将其解析为您要查找的 IP。

于 2018-05-25T13:31:25.340 回答
1

查询元数据服务器

eip=`curl -s 169.254.169.254/latest/meta-data/public-ipv4`
echo $eip
于 2018-05-25T13:37:30.290 回答
0

该解决方案与我最初的要求完全不同,但足以满足我的要求。

我只需要知道我所处的环境即可执行某些操作。所以我所做的是在一个独立的脚本文件中设置一个环境变量,其中设置了环境变量,值是环境的值。例如:假设在文件 env-variables.sh export profile= stage

在必须根据环境执行命令的脚本文件中,我以这种方式访问​​它

 source /test/env-variables.sh
    echo current profile is $profile
    if [ $profile = stage ]
    then
        echo stage
    elif [ $profile = production ]
    then
        echo production
else
        echo failure
    fi

希望有人觉得它有用

于 2018-05-28T07:06:46.813 回答