前言

有这么一个自动化部署的需求,凑巧 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 "部署已完成"

至此再次提交新代码时可以自动化部署到前端了

参考

Git 服务器 利用 hook 实现自动部署

记一次基于 PowerShell 的 Git 自动化部署 Java 多服务实践的更多相关文章

  1. Jenkins+Docker+Git 自动化部署

    Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...

  2. 基于Jenkins+Gitlab的自动化部署实战

    故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称“人肉部署”,这简直是无比的痛苦,不能忍受的 ...

  3. git jenkins 部署java项目

    1.Java项目部署基本概述:  1.什么是Java项目?  2.为什么Java项目需要使用Maven编译?  3.手动实现Java项目构建?  4.手动实现Java项目架构图? 源码包   jar包 ...

  4. 基于Docker+Jenkins实现自动化部署

    使用码云搭建Git代码存储仓库 https://gitee.com/login 使用码云创建私有私有git仓库 将本地springboot项目上传到git仓库中 基于Docker安装Jenkins环境 ...

  5. ***git自动化部署总结

    在网上搜了一堆没用找到太仔细的教程,于是花费2天时间,自己研究了下.现在分享如下: 思路:利用crontab定时去去执行git pull脚本 首先,用git clone命令将中央库的代码下载到阿里云 ...

  6. git自动化部署+rsync文件同步

    1.进入线上git裸仓库 2.编辑post-receive #!/bin/sh unset GIT_DIR cd /var/www/ git pull http://web:xxxxxxx@120.3 ...

  7. jenkins + nodejs + git 自动化部署前端

    1.  创建自定义风格任务 2.填写项目描述 3.配置源码管理 4. 系统管理->插件管理 ->安装插件 5.配置系统管理->全局工具配置-> 6.配置全局 ssh 7. 继续 ...

  8. 基于Jenkins,docker实现自动化部署(持续交互)

      前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...

  9. 基于Jenkins,docker实现自动化部署(持续交互)【转】

      前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...

  10. [转]基于AWS的自动化部署实践

    作者 徐桂林 发布于 2014年1月22日 -------------------------------------------------------------------- 1. 背景 在过去 ...

随机推荐

  1. 【论文阅读】Learning Deep Features for Discriminative Localization

    这个是周博磊16年的文章.文章通过实验证明,即使没有位置标注,CNN仍是可以得到一些位置信息,(文章中的显著性图) CNN提取的feature含有位置信息,尽管我们在训练的时候并没有标记位置信息: 这 ...

  2. 一篇随笔入门Java

    Java helloWorld 随便新建一个文件夹存放代码 新建一个java文件 文件后缀名.java Hello.java [注意]系统可能不显示后缀名要手动打开 代码 public class H ...

  3. CPython, Pypy, MicroPython...还在傻傻分不清楚?

    哈喽大家好,我是咸鱼 当我们说 Python 时,通常指的是官方实现的 CPython 但还有很多比如 Pypy.Jython.MicroPython.Brython.RustPython 等 &qu ...

  4. 浅析华为云Astro的5大关键能力技术

    摘要:本文以技术方案视角,对华为云Astro低代码平台的一些核心功能进行简要介绍. 背景介绍 低代码开发基于可视化开发的概念,结合了云原生和多终端体验技术,它可以在大多数业务场景中,帮助企业显著的提升 ...

  5. Seal AppManager如何基于Terraform简化基础设施管理

    作者简介 陈灿,数澈软件Seal 后端研发工程师,曾在腾讯负责敏捷研发体系建设以及 DevOps 解决方案的敏捷实践.在敏捷研发和产品效能提升有着丰富的经验,致力于构建一站式研发友好的平台工程解决方案 ...

  6. excel:if语句

    IF语法格式: IF(logical_test,value_if_true,value_if_false) 释义:判断一个条件是否满足,如果满足返回一个值,如果不满足则返回另一个值. logical_ ...

  7. Blazor前后端框架Known-V1.2.11

    V1.2.11 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Git ...

  8. 概率dp_C++详解

    引入 概率 DP 用于解决概率问题与期望问题,建议先对概率和期望的内容有一定了解.一般情况下,解决概率问题需要顺序循环,而解决期望问题使用逆序循环,如果定义的状态转移方程存在后效性问题,还需要用到 高 ...

  9. 如何修改min.js或者压缩后的js,以便提高代码的可读性。

    前端的js上线的时候一般会使用打包工具处理(webpack,gulp,ugly.js 等).这样做有几点作用. 可以压缩空间,提高页面响应速度 一定程度上可以保护自己的代码安全,防止别人清晰看懂逻辑或 ...

  10. Java 设计模式实战系列—单例模式

    本文首发公众号:小码A梦 单例模式是设计模式中最简单一个设计模式,该模式属于创建型模式,它提供了一种创建实例的最佳方式. 单例模式的定义也比较简单:一个类只能允许创建一个对象或者实例,那么这个类就是单 ...