我正在使用 AWS 代码部署代理并通过 bitbucket 插件将我的项目部署到服务器。
代码部署代理首先执行脚本文件,其中包含执行我的 spring-boot 项目的命令。
因为我有两个环境一个开发和另一个生产。我希望脚本根据环境(即两个不同的实例)做不同的事情。
我的计划是获取映射的 aws 静态 IP 地址并从中确定环境(生产或阶段)。
如何通过 sh 命令获取弹性 IP 地址。
已编辑
我正在使用 AWS 代码部署代理并通过 bitbucket 插件将我的项目部署到服务器。
代码部署代理首先执行脚本文件,其中包含执行我的 spring-boot 项目的命令。
因为我有两个环境一个开发和另一个生产。我希望脚本根据环境(即两个不同的实例)做不同的事情。
我的计划是获取映射的 aws 静态 IP 地址并从中确定环境(生产或阶段)。
如何通过 sh 命令获取弹性 IP 地址。
已编辑
静态 IP 将起作用。
这是解决此问题的更自然的 CodeDeploy 方法 - 设置 2 个 CodeDeploy 部署组,一个用于您的开发环境,另一个用于您的生产环境。然后在您的脚本中,您可以使用 CodeDeploy 在部署期间设置的环境变量来了解您要部署到哪个环境。
这是一篇关于如何使用 CodeDeploy 环境变量的博客文章:https ://aws.amazon.com/blogs/devops/using-codedeploy-environment-variables/
您可以执行以下操作:
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。
查询元数据服务器
eip=`curl -s 169.254.169.254/latest/meta-data/public-ipv4`
echo $eip
该解决方案与我最初的要求完全不同,但足以满足我的要求。
我只需要知道我所处的环境即可执行某些操作。所以我所做的是在一个独立的脚本文件中设置一个环境变量,其中设置了环境变量,值是环境的值。例如:假设在文件 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
希望有人觉得它有用