[AWS]codedpoly+ec2+cli+jenkins部署方式规范文档
AWS CodeDeploy 自动化部署
第三方插件实现代理部署EC2 以下是Windows部署示例
目录
[AWS]codedpoly+ec2+cli+jenkins部署方式规范文档
before-install.bat 部署前先关闭服务再拷贝
一.准备
1.创建角色arn
arn:aws-cn:iam::641382364915:role/CodeDeployExampleRole 用于部署组配置
注意: 下面只需加AWSCodeDeployRole 比如加了AWSCodeDeployRoleForECS策略会出现windows 路径是/不是\\
2.创建EC2
添加标签 用于部署组配置 ,
进入机器内 安装codedeloy代理中国区使用的香港的 国外使用对应的
3. appspec.yml 配置
version: 0.0
os: windows
files:
- source: patch
destination: C:\Sobey\XDCamAir
hooks:
BeforeInstall:
- location: scripts\before-install.bat
ApplicationStart:
- location: scripts\start_server.bat
timeout: 6
ValidateService:
- location: scripts\validate_server.bat
4.脚本准备
before-install.bat 部署前先关闭服务再拷贝
@echo off
set exename=XdApi.exe
TaskList|Findstr /i "%exename%">Nul
If ErrorLevel 1 (
echo "NO EXIT :不存在此应用"
)else (
echo "EXIT :存在此应用 杀死它"
taskkill /f /im %exename%
)
scripts\start_server.bat
@echo off
REM 后台运行 不是会导致部署一直在这和启动的服务一起
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit
set mypath=C:\Sobey\XDCamAir
set exename=XdApi.exe
cd %mypath%
start %exename%
echo "启动服务命令已执行"
exit 0
scripts\validate_server.bat
@echo off
set exename=AuthorizeManage.exe
TaskList|Findstr /i "%exename%">Nul
If ErrorLevel 1 (
echo "NO EXIT :不存在此应用 让其报异常"
taskkill /f /im %exename%
)else (
echo "EXIT DEPLOY:存在此 部署应用"
)
5.S3压缩文件目录结构
放在s3下面的zip目录结构:
二.aws控制台部署
1.创建应用 应用程序
2.创建部署组 注意: 环境配置 选 Amazon EC2 实例 选本地的实例不可行
3.创建部署 添加对应的s3地址的zip
三.jenkins+CLI脚本部署
#自定义项目名
ProjectName="auth"
version=saas.1.0.0
tag=$(date +%Y%m%d%H%M)
zipname=${ProjectName}-${version}-${tag}".zip"
echo ----------------------------------------------构建开始-------------------------------------------------
dotnet build -c Release AuthorizeManage.sln
cd AuthorizeManage
dotnet publish -c Release -o ../publish
cd ..
cp Auth.AmazonSecurityTokenService/bin/Release/netstandard2.0/Auth.AmazonSecurityTokenService.dll -r publish/ControllerPlugin/netstandard2.0
cp Auth.CheckPlugin/bin/Release/netstandard2.0/Auth.CheckPlugin.dll -r publish/ControllerPlugin/netstandard2.0
cp Auth.CloudFrontSDK/bin/Release/netstandard2.0/Auth.CloudFrontSDK.dll -r publish/ControllerPlugin/netstandard2.0
cp Auth.Core/bin/Release/netstandard2.0/Auth.Core.dll -r publish/ControllerPlugin/netstandard2.0
echo -------------------------------------------------------更新aws EC2服务---------------------------------------------
#-----------------整合发布包-------------
my_dir=codedeploy_publish
if [ ! -d "$my_dir" ]; then
echo "创建文件夹"
mkdir $my_dir
else
echo $my_dir ":文件夹已存在"
fi
cd codedeploy_publish
my_dir=patch
if [ ! -d "$my_dir" ]; then
echo "创建文件夹"
mkdir $my_dir
else
rm -fr $my_dir
mkdir $my_dir
echo $my_dir ":文件夹已存在"
fi
cp ../Auth.AmazonSecurityTokenService/bin/Release/netstandard2.0/Auth.AmazonSecurityTokenService.dll -r patch
cp ../Auth.CheckPlugin/bin/Release/netstandard2.0/Auth.CheckPlugin.dll -r patch
cp ../Auth.CloudFrontSDK/bin/Release/netstandard2.0/Auth.CloudFrontSDK.dll -r patch
cp ../Auth.Core/bin/Release/netstandard2.0/Auth.Core.dll -r patch
#cp ../publish/* -r patch
cp /other/aws-tasks/codedeploy/${ProjectName}/* -r . #-------------ec2上执行脚本
#压缩为zip 推送到s3 删除本地zip
zip -q -r $zipname .
aws s3 cp $zipname s3://codedeploy-patch/${ProjectName}/
rm -fr $zipname
#发布新部署 获取部署后的id 等待给状态
deploymentId=`aws deploy create-deployment \
--application-name SaasApplicationEC2 \
--deployment-config-name CodeDeployDefault.OneAtATime \
--deployment-group-name SaasWinDepoly \
--description "jenkins codedeploy deployment" \
--s3-location bucket=codedeploy-patch,bundleType=zip,key="auth/"$zipname | jq ".deploymentId" | tr -d '"'`
#查看部署状态
aws deploy wait deployment-successful --deployment-id $deploymentId