记一次基于 PowerShell 的 Git 自动化部署 Java 多服务实践
前言
有这么一个自动化部署的需求,凑巧 git 还直接建立在测试服务器上,部署后可以直接在测试服务器上演示
步骤
建立 Git 仓库
与一般的 Git 部署一样,区别是需要添加 --bare 开关,这样可以建立一个裸库(只有 .git 文件夹内容无工作区)而不是一个完整的库。
mkdir test.git
cd test.git
git init --bare
此时可以将本地代码推送到该库中,推送完成后还需要建立一个部署专用的工作区,这里放在 deploy 文件夹中。
mkdir deploy
cd deploy
# clone 可以使用 file:/// 地址也可以使用绝对或相对路径
git clone ../source/test
cd test
git fetch
git checkout master
编写自动部署脚本
要在 Git 仓库中建立一个自动化部署脚本,这里用 PowerShell 脚本,因为其面向对象简单好用
# 获取父文件夹名
$directoryName = (Get-ChildItem)[0].Parent.Name;
# 获取时间
$time = [datetime]::Now.ToString("yyyyMMddHHmmss");
# 输出地址
$logFilePath = "../log/$directoryName-$time.log"
# 操作用户名
$userName = whoami
"正在使用$userName账户部署$directoryName" > $logFilePath
# git 更新
git fetch --all *>> $logFilePath
git checkout origin/master *>> $logFilePath
git reset --hard *>> $logFilePath
# maven 编译
bash mvnw clean *>> $logFilePath
bash mvnw compile *>> $logFilePath
bash mvnw package *>> $logFilePath
# 执行 jar 包,这里使用 Screen 运行
$jars=dir -r *.jar
$jars=$jars | where {$_.Parent.Name -match "target"}
$jars | foreach {
screen -S "$($_.BaseName)-master" -X stuff "^C";
screen -XS "$($_.BaseName)-master" quit;
screen -wipe;
screen -dmS "$($_.BaseName)-master";
screen -S "$($_.BaseName)-master" -X stuff "java -Dfile.encoding=utf8 -jar $($_.FullName)`n"
}
# 编译前端
cd ui
$logFilePath = "../" + $logFilePath
npm install *>> $logFilePath
npm run build:prod *>> $logFilePath
# 部署前端
rm -rf /wwwroot
mv dist /wwwroot
chmod -R 755 /wwwroot
chown -R nginx:nginx /wwwroot
service nginx restart *>> $logFilePath
"部署完成" *>> $logFilePath
添加 Git Hook 自动化脚本
在上一步新建的库中可以看到 hooks 文件夹,hooks 文件夹就是放置 Git 各种事件触发后执行的命令的地方,新建一个 post-receive 文件,并赋予权限 777,并写入下面的代码:
#!/usr/bin/bash
# 判断是否为远程仓库
IS_BARE=$(git rev-parse --is-bare-repository)
if [ -z "$IS_BARE" ]; then
echo >&2 "fatal: post-receive: IS_NOT_BARE $IS_BARE"
exit 1
fi
echo "正在进行自动部署"
unset GIT_DIR
# 部署路径
DeployPath="/root/deploy/test"
cd $DeployPath
# 执行部署脚本
pwsh ./Start-Deploy.ps1
echo "部署已完成"
至此再次提交新代码时可以自动化部署到前端了
参考
记一次基于 PowerShell 的 Git 自动化部署 Java 多服务实践的更多相关文章
- Jenkins+Docker+Git 自动化部署
Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...
- 基于Jenkins+Gitlab的自动化部署实战
故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称“人肉部署”,这简直是无比的痛苦,不能忍受的 ...
- git jenkins 部署java项目
1.Java项目部署基本概述: 1.什么是Java项目? 2.为什么Java项目需要使用Maven编译? 3.手动实现Java项目构建? 4.手动实现Java项目架构图? 源码包 jar包 ...
- 基于Docker+Jenkins实现自动化部署
使用码云搭建Git代码存储仓库 https://gitee.com/login 使用码云创建私有私有git仓库 将本地springboot项目上传到git仓库中 基于Docker安装Jenkins环境 ...
- ***git自动化部署总结
在网上搜了一堆没用找到太仔细的教程,于是花费2天时间,自己研究了下.现在分享如下: 思路:利用crontab定时去去执行git pull脚本 首先,用git clone命令将中央库的代码下载到阿里云 ...
- git自动化部署+rsync文件同步
1.进入线上git裸仓库 2.编辑post-receive #!/bin/sh unset GIT_DIR cd /var/www/ git pull http://web:xxxxxxx@120.3 ...
- jenkins + nodejs + git 自动化部署前端
1. 创建自定义风格任务 2.填写项目描述 3.配置源码管理 4. 系统管理->插件管理 ->安装插件 5.配置系统管理->全局工具配置-> 6.配置全局 ssh 7. 继续 ...
- 基于Jenkins,docker实现自动化部署(持续交互)
前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...
- 基于Jenkins,docker实现自动化部署(持续交互)【转】
前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...
- [转]基于AWS的自动化部署实践
作者 徐桂林 发布于 2014年1月22日 -------------------------------------------------------------------- 1. 背景 在过去 ...
随机推荐
- Jupyter无法运行websocket错误
Juputer无法连接 系websocket连接出问题,浏览器控制台报错 ws 连接异常 WebSocket connection to 'ws://localhost:8888/api/kernel ...
- 【WALT】scale_exec_time() 代码详解
@ 目录 [WALT]scale_exec_time() 代码详解 代码展示 代码逻辑: 为什么归一化? ⑴ 将 CPU cycles 转换为 CPU 当前频率 ⑵ 归一化 delta [WALT]s ...
- Lite-Mono(CVPR2023)论文解读
Lite-Mono: A Lightweight CNN and Transformer Architecture for Self-Supervised Monocular Depth Estima ...
- 《HelloGitHub》第 88 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- ASP.NET WebForm中在TextBox输入框回车时会触发其他事件,如何处理?
一.TextBox在输入框回车时会触发其他事件,如何解决? 前台代码: <ul> <li><span>名称:</span><asp:TextBox ...
- auto-GPT部署
Auto-GPT 是一个实验性开源应用程序,其作者在3月31日将其发布在Github上.它以GPT-4 作为驱动,可以自主做出决定以实现目标,无需用户干预.AutoGPT的地址:https://git ...
- JDK中动态库加载路径问题,一文讲清
前言 本周协助测试同事对一套测试环境进行扩容,我们扩容很原始,就是新申请一台机器,直接把jdk.resin容器(一款servlet容器).容器中web应用所在的目录,全拷贝到新机器上,servlet容 ...
- Mysql高级8-触发器
一.触发器 触发器是与表有关的数据库对象,指在insert/update/delete之前或者之后,触发并执行触发器中定义的sql语句集合,触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志 ...
- 20款VS Code实用插件推荐
前言 VS Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的VS Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持插件式安装环境开发让VS ...
- .NET Evolve 数据库版本管理工具
.NET Evolve数据库版本管理工具 1.简介 提到数据库版本管理,Java领域开发首先会想到大名鼎鼎的flyway.但是它不适用.NET领域,那么.NET领域也需要做数据库版本管理,该用什么工具 ...