我正在使用AWS代码部署代理并通过bitbucket插件将我的项目部署到服务器。
代码部署代理首先执行脚本文件,其中包含执行spring-boot项目的命令。
由于我有两个环境,一个开发和另一个生产。我希望脚本根据环境做出不同的处理,即两个不同的实例。
我的计划是获取映射的aws静态ip-address,然后从中确定环境 (生产或阶段)。
如何通过sh命令获取弹性IP地址。
编辑
答案 0 :(得分:2)
静态IP将起作用。
这是一种更自然的CodeDeploy解决方法 - 设置2个CodeDeploy部署组,一个用于您的开发环境,另一个用于您的生产环境。然后在您的脚本中,您可以使用CodeDeploy在部署期间将设置的环境变量来了解您要部署到哪个环境。
以下是有关如何使用CodeDeploy环境变量的博文:https://aws.amazon.com/blogs/devops/using-codedeploy-environment-variables/
答案 1 :(得分: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。
答案 2 :(得分:1)
查询元数据服务器
eip=`curl -s 169.254.169.254/latest/meta-data/public-ipv4`
echo $eip
答案 3 :(得分: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
希望有人发现它有用