一、Jenkins安装
请参考其他, 本文内容jenkins 安装的版本为Jenkins 2.230
二、配置全局凭据
三、配置示例
四、配置示例详情及相关脚本
@rollback的Groovy Script
path="${jenkinsProject.workspace}/backup/"
rollback=['bash', '-c', "ls -t1 ${path} | grep .zip "].execute().text.readLines()
if (action.equals("RollBack")) {
return rollback
} else {
return ["选择RollBack后显示"]
}
@仓库地址:git@bitbucket.org:xxx_doctor_view/xxx_doctor_view_v1.git
需要在Jenkins安装服务器上生成SSH key。并将公钥发到Bitbucket或者Github仓库里面以获取拉取代码的权限。
Linux服务器的公钥获取命令:cat ~/.ssh/id_rsa.pub
@Builder过程 conditional step
--Execute Shell步骤一 回滚则退出不继续执行下面的步骤二
if [ "${action}" = "RollBack" ]; then
exit -1;
fi
--Execute Shell步骤二 升级则执行打包命令
yarn -v
yarn install
yarn build:doctor
@Bulder过程 Execute Shell
site_name=XXX_DOCTOR_VIEW
backup_path=${WORKSPACE}/backup
site_folder=${JENKINS_HOME}/workspace/website/$site_name
parent_site_folder=${JENKINS_HOME}/workspace/website
build_folder=${WORKSPACE}/$site_name
time=`date +%Y-%m-%d-%H-%M`
oldtmpname=${site_name}_delete
newtmpname=${site_name}_${time}
if [ ! -d $backup_path ]; then
mkdir -p $backup_path
fi
if [ ! -d $site_folder ]; then
mkdir -p $site_folder
fi
if [ ! "$action" = "RollBack" ]; then
#Step1:打包后第一步备份
cd $backup_path
#branch=${GIT_BRANCH}
#branch=$choose
branch=${choose/#"origin/"/}
branch_name=${branch//"/"/"-"}
backupname=${JOB_NAME}-${branch_name}-build${BUILD_NUMBER}-${time}.zip
cp -r $build_folder $backup_path
zip -q -r $backupname ./$site_name/*
rm -rf $backup_path/$site_name
total_file_num=`ls -l | grep -v 'total' | wc -l`
if [ $total_file_num -gt 5 ];
then
num=`expr $total_file_num - 5`
files=`ls -ltr | grep -v 'total' | awk '{print $9}' | head -n $num`
echo $files | xargs rm -f
echo "保留5个备份,删除早期备份: " $files
fi
#Step2:打包后第二步升级
#换名称COPY
mv ${WORKSPACE}/$site_name -f ${WORKSPACE}/$newtmpname
cp -r ${WORKSPACE}/$newtmpname $parent_site_folder
mv ${WORKSPACE}/$newtmpname -f ${WORKSPACE}/$site_name
#新包旧包更换名称
mv $parent_site_folder/$site_name -f $parent_site_folder/$oldtmpname
mv $parent_site_folder/$newtmpname -f $parent_site_folder/${site_name}
rm -rf $parent_site_folder/$oldtmpname
else
if [ ! -d $backup_path/${rollback}_${time} ]; then
mkdir -p $backup_path/${rollback}_${time}
fi
cd $backup_path
#解压
ufolder=${rollback}_${time}
unzip -q -o $backup_path/${rollback} -d $backup_path/$ufolder
#换名称COPY
mv $backup_path/$ufolder/$site_name -f $backup_path/$ufolder/$newtmpname
cp -r $backup_path/$ufolder/$newtmpname $parent_site_folder
mv $backup_path/$ufolder/$newtmpname -f $backup_path/$ufolder/$site_name
#新包旧包更换名称
mv $parent_site_folder/$site_name -f $parent_site_folder/$oldtmpname
mv $parent_site_folder/$newtmpname -f $parent_site_folder/$site_name
rm -rf $parent_site_folder/$oldtmpname
#删除解压文件夹
rm -rf $backup_path/$ufolder
fi
五、效果展示
可以实现前端网站的构建升级 以及 回滚操作。
六、Nginx配置 (前端vue项目)
server {
listen 80;
server_name doctor.xxx.com;
index index.php index.htm index.html;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
root /var/lib/jenkins/workspace/website/XXX_DOCTOR_VIEW;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location / {
try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
index index.html index.htm;
}
location @router {
rewrite ^.*$ /index.html last;
}
location /api/ {
rewrite ^/b/(.*)$ /$1 break;
proxy_pass http://api.xxx.com;
}
error_log /usr/local/nginx/logs/error_prod_xxx_doctor_view_log;
access_log /usr/local/nginx/logs/access_prod_xxx_doctor_view_log;
}