CI/CD结合AWS实践

原创
2020/11/20 09:58
阅读数 293

此篇主要是介绍一种结合AWS实现的能达到一定敏捷和安全诉求的CI/CD方案。

Jenkins

  1. 首先需要在内网(云内网或公司内网)配置一台jenkins服务器,这不是本文介绍的重点,如果不会可以Google
  2. 给应用配置task,例如Java应用,通过Jenkins编译打包完之后,把jar包放在AWS s3的bucket中。

AWS服务器设置

  1. 在应用服务器上设置一些tags,比如jar:order、version:1.22.0等,如下图:
    tags
  2. 服务器需要配置AWS IAM Role,例如:qa-service,这个Role需要有s3的可读权限,在服务器上配置如下脚本:
#!/usr/bin/env bash

APP=$2

instanceInfo=$(ec2-metadata | grep 'instance-id')
eccTag=(${instanceInfo})
instanceId=${eccTag[1]}
echo "this instance id: ${instanceId}"

update()
{
   
   ## 根据ec2的tag【version】获取jar包version
   version="$(aws ec2 describe-tags --region cn-northwest-1 --filters "Name=resource-id,Values=${instanceId}" "Name=key,Values=version" | jq '.Tags[0].Value' | sed 's/"//g')"
   ## 获取需要的jar名称
   if [[ -z ${APP} ]]; then
        APP="$(aws ec2 describe-tags --region cn-northwest-1 --filters "Name=resource-id,Values=${instanceId}" "Name=key,Values=jar" | jq '.Tags[0].Value' | sed 's/"//g')"
   fi
   ## 从s3获取jar包
   echo "pulling jar from s3..."
   aws s3 cp --region cn-northwest-1 s3://xxxx/qa/${APP}-${version}-SNAPSHOT.jar /home/xxx/${APP}.jar
}

restart()
{
   
    #切换至root用户
    echo "restart app..."
    sudo su - root -c "supervisorctl restart ${APP}"
}


if [[ $1 == "update" ]]; then
    update
elif [[ $1 == "restart" ]]; then
    restart
elif [[ $1 == "reload" ]]; then
    update
    restart
fi

jq是shell的一个json工具,可以通过yum install jq安装

AWS s3 和IAM Role的设置可以参考AWS 文档,非常清晰。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部