利用Jenkins+ansible部署VUE项目自动打包更新文件夹

vue项目自动打包推送。需要npm run install
针对前端VUE版本更新,自动下载、打包、备份、上传全量更新
第一步:点击选择需要部署的城市,会自动生成部署的项目信息,确认IP和项目路径
第二步:点击构建

jobs应用场景

公司代码库利用npm run build:prod打包后传送接口文件夹到目标服务器,因为公司项目问题遗留都部署一个文件夹,不能用传统的直接操作文件夹,只能通过这种方式去部署。

目录:DPstatic  文件:data.json  favicon.ico  index.html

首先打完包后备份部署服务器的源文件到/data/backup目录下,传送新版本文件夹到目标服务器,

一、构建界面

《利用Jenkins+ansible部署VUE项目自动打包更新文件夹》

二、指定构建地区

 《利用Jenkins+ansible部署VUE项目自动打包更新文件夹》

 二、构建说明

《利用Jenkins+ansible部署VUE项目自动打包更新文件夹》 三、需要部署到的服务器,下面指定构建Referenced parameters为上面的area_name《利用Jenkins+ansible部署VUE项目自动打包更新文件夹》

《利用Jenkins+ansible部署VUE项目自动打包更新文件夹》

四、需要部署到目标服务器路径,下面指定构建Referenced parameters为上面的area_name

 《利用Jenkins+ansible部署VUE项目自动打包更新文件夹》

 《利用Jenkins+ansible部署VUE项目自动打包更新文件夹》

五、git库

《利用Jenkins+ansible部署VUE项目自动打包更新文件夹》

六、构建时输出有时间、颜色、全局变量

《利用Jenkins+ansible部署VUE项目自动打包更新文件夹》

七、构建shell

《利用Jenkins+ansible部署VUE项目自动打包更新文件夹》

 #!/bin/bash    
echo -e "\033[34m#####判断是否正确输入数据#####\033[0m"
if [ -z ${source_file} ] && [ -z ${destination_file} ];then
echo -e "\033[31m未输入参数,请重新输入\033[0m"
exit 1
else
echo -e "\033[34m输入内容正确\033[0m"
fi

echo -e "\033[34m######判断IP是否输入正确#####\033[0m"
cat /etc/ansible/hosts | grep -v "#" | awk  '{print $1}' | grep ${destination_ip}
if [ $? -eq 0 ]
   then
       echo -e "\033[34m此IP在hosts列表,可以执行同步\033[0m"
   else
       echo -e "\033[31m确定IP,先添加到hosts文件\033[0m"
       exit 1
fi
echo -e "\033[34m#######打印输入#####\033[0m"
echo -e "\033[34m源路径:${source_file}\033[0m"
echo -e "\033[34m目标路径:${destination_file}\033[0m"
echo -e "\033[34m目标IP:${destination_ip}\033[0m"
        
if [ $GIT_PREVIOUS_SUCCESSFUL_COMMIT == $GIT_COMMIT ] 
then
echo -e "版本相同无需打包"
else
        echo -e "\033[34m开始执行npm  install\033[0m"
        #/usr/local/node/bin/npm install -g yarn
        #yarn install
        cnpm install
        sleep 5
        
             [ $? -eq 0 ] && echo -e "\033[32m 执行npm install成功。\033[0m" || { 
            echo -e "\033[31m执行npm install失败。\033[0m"
            exit 1
        }
        echo -e "\033[34m执行npm run build\033[0m"
        nohup /usr/local/node/bin/npm run build:prod  &
       
        sleep 40
         kill 2
        [ $? -eq 0 ] && echo -e "\033[32m 执行npm run build成功。\033[0m" || { 
            echo -e "\033[31m执行npm run build失败。\033[0m"
            exit 1
        }
        cd ${source_file}
        zip -r ${source_filezip} ./ && {
        echo -e "\033[32m压缩成功。\033[0m"
        } || {
            echo -e "\033[32m压缩失败。\033[0m"
            exit 1
        }
         \mv ${source_filezip} $WORKSPACE
fi

#####利用ansible进行文件拷贝

date=`date "+%Y-%m-%d-%H-%M-%S"`
echo -e "\033[34m#####目标文件备份#####\033[0m"
echo ${destination_file} > /tmp/name
backup_name=/data/backup/front-"`cat /tmp/name | awk -F "/" '{print $5}'`"/"`cat /tmp/name | awk -F "/" '{print $5}'`".bak${date}


echo -e "\033[34m#判断备份目录是否存在,不存在重新创建\033[0m"
ansible ${destination_ip} -m file -a 'path={
  { backup_name }}  state=directory'  -e  backup_name=${backup_name}
echo -e "\033[34m$backup_name备份目录创建完成\033[0m"

echo -e "\033[34m#判断发版目录是否存在,不存在重新创建\033[0m"
ansible ${destination_ip} -m file -a 'path={
  { destination_file }}  state=directory'  -e  destination_file=${destination_file}
echo -e "\033[34m$backup_name发版目录创建完成\033[0m"

echo -e "\033[34m###开始备份###\033[0m"
DPstatic=${destination_file}/DPstatic
data_json=${destination_file}/data.json
favicon_ico=${destination_file}/favicon.ico
index_html=${destination_file}/index.html

#back_file=${destination_file##*/}
ansible "$destination_ip" -m command -a '\mv  "{
  { DPstatic }}" "{
  { backup_name }}"' -e DPstatic=${DPstatic} -e backup_name=${backup_name}
 [ $? -eq 0 ] && echo -e "\033[34m ${DPstatic}备份完成\033[0m" || { 
            echo -e "\033[31m${DPstatic}备份失败\033[0m"
            exit 1
        }
ansible "$destination_ip" -m command -a '\mv  "{
  { data_json }}" "{
  { backup_name }}"' -e data_json=${data_json} -e backup_name=${backup_name}
 [ $? -eq 0 ] && echo -e "\033[34m ${data_json}备份完成\033[0m" || { 
            echo -e "\033[31m${data_json}备份失败\033[0m"
            exit 1
        }
ansible "$destination_ip" -m command -a '\mv  "{
  { favicon_ico }}" "{
  { backup_name }}"' -e favicon_ico=${favicon_ico} -e backup_name=${backup_name}
 [ $? -eq 0 ] && echo -e "\033[34m ${favicon_ico}备份完成\033[0m" || { 
            echo -e "\033[31m${favicon_ico}备份失败\033[0m"
            exit 1
        }
ansible "$destination_ip" -m command -a '\mv  "{
  { index_html }}" "{
  { backup_name }}"' -e index_html=${index_html} -e backup_name=${backup_name}
 [ $? -eq 0 ] && echo -e "\033[34m ${index_html}备份完成\033[0m" || { 
            echo -e "\033[31m${index_html}备份失败\033[0m"
            exit 1
        }


echo -e "\033[34m###开始同步###  \033[0m"      
ansible "$destination_ip" -m copy -a 'src="{
  { source_filezip }}" dest="{
  { destination_file }}"' -e source_filezip=${WORKSPACE}/${source_filezip} -e destination_file=${destination_file}
result=$?
[ ${result} -eq 0 ] && echo -e "\033[34m${source_filezip}同步完成!\033[0m" || {
exit $result
echo -e "\033[31m${source_filezip}同步失败!\033[0m"
}

echo -e "\033[34m###开始解压###  \033[0m"      
ansible "$destination_ip" -m command -a 'unzip -o -d "{
  { destination_file }}" "{
  { source_filezip }}"' -e source_filezip=${destination_file}/${source_filezip} -e destination_file=${destination_file}
result=$?
[ ${result} -eq 0 ] && echo -e "\033[34m${source_filezip}解压完成!\033[0m" || {
exit $result
echo -e "\033[31m${source_filezip}解压失败!\033[0m"
}

echo -e "\033[34m###目录权限添加###  \033[0m"      
ansible "$destination_ip" -m command -a 'chmod -R o+r "{
  { destination_file }}"' -e destination_file=${destination_file}
result=$?
[ ${result} -eq 0 ] && echo -e "\033[34m${source_filezip}权限添加成功!\033[0m" || {
exit $result
echo -e "\033[31m${source_filezip}权限添加失败!\033[0m"
}

    原文作者:三颗草丶
    原文地址: https://blog.csdn.net/icanflyingg/article/details/121175363
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞