首先, 服务已经在线上能跑起来为前提
前端 boring-front, 后端 boring-server
ll /Users/lingye/MyProjects/gitee/boring-server/boring-profession-system/target/lib |grep boring- |awk '{print $9}'
![image.png](https://img-blog.csdnimg.cn/img_convert/acbbb6aa1d0d2820c804bdb37b023c83.png)
实现前提, 参考文章
ansible playbookCentOS7 免密登录指南全网: Springboot 高级瘦身法之MB到KB的转化
各种脚本
reload_nginx.sh
#!/bin/bash
rm -rf /usr/local/nginx/client_body_temp/*
rm -rf /usr/local/nginx/fastcgi_temp/*
rm -rf /usr/local/nginx/proxy_temp/*
rm -rf /usr/local/nginx/uwsgi_temp/*
rm -rf /usr/local/nginx/scgi_temp/*
/usr/local/nginx/sbin/nginx -s reload
run_app.sh
#!/bin/bash
nohup /usr/local/jdk8/bin/java -server -XX:MaxMetaspaceSize=256M -XX:MetaspaceSize=256M -XX:+UseSerialGC -XX:ErrorFile=/odboy/logs/hs_err_pid%p.log -XX:HeapDumpPath=/odboy/logs -XX:+HeapDumpOnOutOfMemoryError -jar /odboy/apps/boring-profession-system.jar > /odboy/logs/boring-profession-system.log 2>&1 &
stop_app.sh
#!/bin/bash
for i in `ps aux|grep boring-profession-system|grep -v grep|awk '{print $2}'`;do kill -9 $i;done
deploy.sh
#!/bin/bash
project_path=~/MyProjects/gitee/
# 前端
cd ${project_path}boring-front
rm -rf ./dist
npm run build:prod
tar -czvf dist.tar.gz dist
rm -rf ./dist
# 后端
cd ${project_path}boring-server
mvn clean package
# playbook
ansible-playbook ./deploy.yml
# 清理战场
cd ${project_path}boring-front
rm -f ./dist.tar.gz
deploy.yml
---
- hosts: all # 这里的all是因为我在/etc/ansible/hosts中定义了主机组
remote_user: root
vars:
blocal_path: /Users/lingye/MyProjects/gitee
bremote_path: /odboy/apps
bmodule_name: boring-profession-system
tasks:
- name: front - push dist.tar.gz as dist
unarchive: src={{ blocal_path }}/boring-front/dist.tar.gz dest={{ bremote_path }}
- name: front - remove dist_boring
command: chdir={{ bremote_path }} rm -rf dist_boring
- name: front - rename dist
command: chdir={{ bremote_path }} mv dist dist_boring
- name: front - reload nginx
script: ./reload_nginx.sh
- name: server - stop app
script: ./stop_app.sh
- name: server - copy main jar
copy: src={{ blocal_path }}/boring-server/{{ bmodule_name }}/target/{{ bmodule_name }}.jar dest={{ bremote_path }}
- name: server - copy dependent jar
copy: src={{ blocal_path }}/boring-server/{{ bmodule_name }}/target/lib/{{ item }} dest={{ bremote_path }}/lib
with_items:
- boring-base-1.0.0.jar
- boring-boot-dingtalk-1.0.0.jar
- boring-boot-security-1.0.0.jar
- boring-core-api-1.0.0.jar
- boring-core-base-1.0.0.jar
- boring-core-service-1.0.0.jar
- boring-gen-api-1.0.0.jar
- boring-gen-base-1.0.0.jar
- boring-gen-service-1.0.0.jar
- boring-log-api-1.0.0.jar
- boring-log-base-1.0.0.jar
- boring-log-service-1.0.0.jar
- boring-mnt-api-1.0.0.jar
- boring-mnt-base-1.0.0.jar
- boring-mnt-service-1.0.0.jar
- boring-profession-config-api-1.0.0.jar
- boring-profession-config-base-1.0.0.jar
- boring-profession-config-service-1.0.0.jar
- boring-profession-finance-api-1.0.0.jar
- boring-profession-finance-base-1.0.0.jar
- boring-profession-finance-job-1.0.0.jar
- boring-profession-finance-service-1.0.0.jar
- boring-profession-life-api-1.0.0.jar
- boring-profession-life-base-1.0.0.jar
- boring-profession-life-job-1.0.0.jar
- boring-profession-life-service-1.0.0.jar
- boring-quartz-api-1.0.0.jar
- boring-quartz-base-1.0.0.jar
- boring-quartz-service-1.0.0.jar
- boring-tools-api-1.0.0.jar
- boring-tools-base-1.0.0.jar
- boring-tools-service-1.0.0.jar
- name: server - run app
script: ./run_app.sh
目录结构
![image.png](https://img-blog.csdnimg.cn/img_convert/edb80f574848da88d5a69a396ed2851c.png)
执行脚本deploy.sh部署, 部署过程结果
PLAY [all] *****************************************************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [aliyun]
TASK [front - push dist.tar.gz as dist] ************************************************************************************************************************************
changed: [aliyun]
TASK [front - remove dist_boring] ******************************************************************************************************************************************
changed: [aliyun]
TASK [front - rename dist] *************************************************************************************************************************************************
changed: [aliyun]
TASK [front - reload nginx] ************************************************************************************************************************************************
changed: [aliyun]
TASK [server - stop app] ***************************************************************************************************************************************************
changed: [aliyun]
TASK [server - copy main jar] **********************************************************************************************************************************************
ok: [aliyun]
TASK [server - copy dependent jar] *****************************************************************************************************************************************
ok: [aliyun] => (item=boring-base-1.0.0.jar)
ok: [aliyun] => (item=boring-boot-dingtalk-1.0.0.jar)
ok: [aliyun] => (item=boring-boot-security-1.0.0.jar)
ok: [aliyun] => (item=boring-core-api-1.0.0.jar)
ok: [aliyun] => (item=boring-core-base-1.0.0.jar)
ok: [aliyun] => (item=boring-core-service-1.0.0.jar)
ok: [aliyun] => (item=boring-gen-api-1.0.0.jar)
ok: [aliyun] => (item=boring-gen-base-1.0.0.jar)
ok: [aliyun] => (item=boring-gen-service-1.0.0.jar)
ok: [aliyun] => (item=boring-log-api-1.0.0.jar)
ok: [aliyun] => (item=boring-log-base-1.0.0.jar)
ok: [aliyun] => (item=boring-log-service-1.0.0.jar)
ok: [aliyun] => (item=boring-mnt-api-1.0.0.jar)
ok: [aliyun] => (item=boring-mnt-base-1.0.0.jar)
ok: [aliyun] => (item=boring-mnt-service-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-config-api-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-config-base-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-config-service-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-finance-api-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-finance-base-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-finance-job-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-finance-service-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-life-api-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-life-base-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-life-job-1.0.0.jar)
ok: [aliyun] => (item=boring-profession-life-service-1.0.0.jar)
ok: [aliyun] => (item=boring-quartz-api-1.0.0.jar)
ok: [aliyun] => (item=boring-quartz-base-1.0.0.jar)
ok: [aliyun] => (item=boring-quartz-service-1.0.0.jar)
ok: [aliyun] => (item=boring-tools-api-1.0.0.jar)
ok: [aliyun] => (item=boring-tools-base-1.0.0.jar)
ok: [aliyun] => (item=boring-tools-service-1.0.0.jar)
TASK [server - run app] ****************************************************************************************************************************************************
changed: [aliyun]
PLAY RECAP *****************************************************************************************************************************************************************
aliyun : ok=9 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0