代码服务流水线部署平台
jenkins的部署请参考以前的文章
Linux下用tomcat部署jenkins
相关机器之间的免密,请参考以前的文章
Linux下实现免密登录
编写shell自动化部署-代码服务流水线脚本,脚本内容如下
code_pipeline.sh
#!/bin/sh
#init param
git_server=《git服务器ip地址》
code_path=/data/java/code
tomcat_path=/opt/tomcat/tomcat
project_name=$1
branch_name=$2
env=$3
function git_pull_code(){
echo -e "[34m ==开始拉取$project_name项目,$branch_name分支代码== [0m"
rm -rf $code_path && mkdir -p $code_path && cd $code_path
git init
git remote add origin git@$git_server:/home/git/repos/$project_name.git
git pull origin $branch_name >/dev/null 2>&1
if [ $? -eq 1 ];then
echo -e "[31m ==拉取失败,需查项目$project_name,分支$branch_name是否存在== [0m"
exit 0
fi
git log --pretty=format:"%h - %an, %ai : %s" -5
}
function maven_pack_code(){
echo -e "[34m ==开始对$branch_name代码打包== [0m"
cd $code_path/$project_name && mvn clean install -Dmaven.test.skip=true
if [ $? -eq 1 ];then
echo -e "[31m ==打包失败,需查项目$project_name,分支$branch_name代码== [0m"
exit 0
fi
}
function remote_deploy_code(){
envip=`find /root -name env_info.json | xargs cat | jq -r '.'$project_name'.'$env''`
arrayIp=`echo $envip | tr ',' ' '`
for ip in ${arrayIp[@]}
do
{
echo -e "[34m ==开始对$env环境$ip机器部署== [0m"
ssh root@$ip "source /etc/profile && rm -rf $tomcat_path/webapps/$project_name* && sh $tomcat_path/bin/shutdown.sh >/dev/null 2>&1"
if [ $? -eq 1 ];then
echo -e "[31m ==部署失败,jenkins连$ip失败或关闭tomcat服务失败== [0m"
exit 0
fi
scp $code_path/$project_name/target/$project_name.war root@$ip:$tomcat_path/webapps/
if [ $? -eq 1 ];then
echo -e "[31m ==部署失败,jenkins连$ip失败或推送$project_name.war失败== [0m"
exit 0
fi
ssh root@$ip "source /etc/profile && sh $tomcat_path/bin/startup.sh"
if [ $? -eq 1 ];then
echo -e "[31m ==$project_name项目在$ip机器上部署失败== [0m"
exit 0
fi
echo -e "[34m ==$project_name项目在$ip机器上部署成功== [0m"
}&
done
wait
}
git_pull_code
maven_pack_code
remote_deploy_code
env_info.json
根据自己需求配置ip地址,集群环境用逗号隔开
{
"spring":{
"test":"192.168.188.134,192.168.188.135",
"dev":"",
"pre":"",
"pro":""
}
}
注:执行此脚本需要jq支持
Linux下安装jq
将脚本和JSON文件放在指定目录/root/tools/shell/pipeline下
jenkins新建任务步骤如下
time sh /root/tools/shell/pipeline/code_pipeline.sh $project_name $branch_name $env
保存后就算完成jenkins的配置了