SVN配置提交代码自动部署

   最近新开了web端项目,前端开发完成后,需要将打包文件再替换到web目录,感觉有点麻烦,于是想找找一劳永逸的方法,恰好配置svn的 post-commit可以实现此功能,在此记录下来。

hooks

  SVN安装路径下有个hooks文件夹,hooks是什么东西呢?

  Hooks 钩子,主要实现的功能就是在特定事件发生之前或者之后自动执行事先定义好的脚本代码来实现某些功能,类似于JS中的监听事件、MySQL中的触发器、Django中的signals信号等。

SVN服务端hooks主要有以下9种:

pre-lock:文件加锁前执行,不常用

post-lock:文件加锁后执行,通常用来发送锁定事件通知,需要传递两个参数给hooks脚本,按照顺序依次为:1.版本库路径,2.锁定路径的认证用户名

per-unlock:文件解锁前执行,不常用

post-unlock:文件解锁后执行,通常用来发送解锁事件通知,需要传递两个参数给hooks脚本,按照顺序依次为:1.版本库路径,2.解锁路径的认证用户名

start-commit:开始提交时执行,在pre-commit之前,通常用来确定用户是否有提交权限

pre-commit:提交之前执行,在start-commit之后,通常用来对提交内容的检查,例如我们后边要介绍的利用pre-commit做提交log的合规性检查,需要传递两个参数给hooks脚本,按照顺序依次为:1.版本库路径,2.提交事务的名称

post-commit:提交完成后执行,这应该是使用最广的hooks之一,通常用来在提交之后发送提交通知,甚至是利用它来做自动化的CI/CD等操作,需要传递两个参数给hooks脚本,按照顺序依次为:1.版本库路径,2.提交创建的修订版本号

pre-revprop-change:在修改revision属性之前执行,不常用

本次使用的就是post-commit

配置hooks

  1. 先切换到hooks目录

    cd /usr/svn/hooks #根据自己安装目录切换

  2. 将原tmpl模板复制一份

    cp post-commit.tmpl post-commit #复制post-commit.tmpl 并重命名为post-commit

  3. 清空post-commit内容

    > post-commit

  4. 打开编辑post-commit

    vim post-commit

    编辑如下内容保存后退出:

    #!/bin/shexport LANG=zh_CN.UTF-8/usr/bin/svn update --username **** --password **** /web/home/dist

    第一行表明shell命令

    第二行标明编码格式UTF-8

    第三行执行svn更新命令 ,后面的文件夹就是要更新到的文件夹,即要部署到的文件夹。此处前端采用vue,打包生成dist目录,所以就更新打包后的dist目录即可实现自动部署。

  5. 修改post-commit文件权限

    post-commit 需要可执行权限

    chmod 755 post-commit

  6. 先checkout

    由于post-commit中是update,所以我们需要先去要自动部署到的文件夹checkout一份

    1. 切换到想要部署到的目录

      cd /web/home/dist

    2. checkout

      检出svn代码

      svn checkout svn://localhost/pc/dist .

    至此所有配置已经结束,尝试提交代码发现web/home/dist目录文件已更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Blazor University (46)依赖注入 —— Transient 依赖

原文链接:https://blazor-university.com/dependency-injection/dependency-lifetimes-and-scopes/transient-dependencies/Transient 依赖Transient 依赖是最容易理解的。在构建注册为 Transient 的可注入依赖项时,依赖项容器只是充当工厂。一旦实例被创…

AM335x 添加 HUAWEI MU609 Mini PCIe Module,并用pppd 启动相关设备

kernel 的配置kernel 3.2.0make menuconfigDevice Drivers --->[*] USB support ---><*> USB Serial Converter support ---><*> USB driver for GSM and CDMA modems kernel 3.2.0make menuconfigDevice Drivers --->[*] Network device supp…

深度挖掘 Laravel 生命周期

本文首发于个人博客 深度挖掘 Laravel 生命周期&#xff0c;转载请注明出处。这篇文章我们来聊聊 「Laravel 生命周期」 这个主题。虽然网络上已经有很多关于这个主题的探讨&#xff0c;但这个主题依然值得我们去研究和学习。 我想说的是当我们在决定使用某项技术的时候&#x…

构建LAMP平台及应用系统

LANP架构指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包括linux操作系统、apache网站服务器、mysql数据库服务器、PHP&#xff08;或Perl、Python&#xff09;网页编程语言。在构建LAMP平台时…

C# DataRow 转 Model 对象 再也不用一个字段一个字段去写了

/*************************************************************************************** 文 件 名: DalUtiles.cs* 描 述: * * 版 本&#xff1a; V1.0* 创 建 者&#xff1a; JackieZheng* 创建时间&#xff1a; 2022/10/16 下午 05:42* * 历史更新记录* 版本…

pyqt2_官网教程

sklearn实战-乳腺癌细胞数据挖掘&#xff08;博主亲自录制视频&#xff09; https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare Articles You can find a collection of P…

VUE页面发布后显示空白 原因之一及解决办法

<template><div><div></div></div><el-dialog></el-dialog> </template> 改为&#xff1a; <template><div><div></div><el-dialog></el-dialog></div> </template> …

Windows10安装WSL2和Ubuntu的过程

因为在Windows10环境中安装了2个相同的包导致冲突&#xff0c;所以想到了通过WSL2Docker的方式进行编程开发。因为Docker Desktop直接安装就行了&#xff0c;不做介绍。本文主要介绍WSL2和Ubuntu的安装过程。一.安装前的环境准备1.升级Windows系统因为低于某个版本号不支持WSL2…

Hyper-V数据文件丢失解决方案(有图有真相)

一、Hyper-V虚拟化故障概述 1、虚拟机环境故障虚拟化环境为ESXI虚拟化服务器&#xff0c;虚拟机环境&#xff0c;虚拟机的硬盘文件和配置文件放在北京某服务器托管公司的DELL MD3200存储中&#xff08;存储由5块容量为600G的硬盘组成raid磁盘阵列&#xff09;。该存储中4块硬盘…

关于bedtools merge 功能中sort 命令的解释

Bedtools 是一个很好的用来处理区间的工具&#xff0c;很多时候用这个底层语言编写的小工具比自己写的脚本运行快很多&#xff0c;但是这个工具中的某些功能对输入文件有一定的要求&#xff0c;比如说里面的一个merge函数&#xff0c;这是里面的一个note&#xff1a; Note&…

cocos2dx 3.x(屏幕截图的两种方法)

【RenderTexture】 RenderTexture这个动态纹理类&#xff0c;顾名思义就是可以动态创建纹理图片。 屏幕截图主要步骤&#xff1a; > 开始截图&#xff1a;render->begin(); > 遍历场景&#xff1a;scene->visit(); > 结束截图&#xff1a;render->end(); >…

SQL小技巧,动态输出本周各天日期

SET DATEFIRST 1; --设置周一为每周第一天 SELECT DATEFIRST;WITH w AS(SELECTCONVERT(varchar(10),T.[Date],120) AS [Date],DATENAME(weekday, T.[Date] ) AS [Week],DATEPART(WK, T.[Date]) AS WeekIndexFROM(SELECTDATEADD(DAY, number, DATEADD(wk, DATEDIFF(wk, 0, get…

开源的价值观与文化的传递

| 作者&#xff1a;Sharan Foga, Apache 软件基金会董事&#xff08;2021 届、2022 届&#xff09;&#xff0c;曾亲身来到 2019 中国开源年会&#xff08;COSCon19&#xff09;以本文内容发表主题演讲。| 翻译&#xff1a;刘天栋.Ted&#xff0c;徐红伟.stronghx| 审阅&#x…

用python来更改小伙伴的windows开机密码,不给10块不给开机

今天教大家用python脚本来控制小伙伴们windows电脑的开机密码。没错就是神不知鬼不觉&#xff0c;用random()随机生成的密码&#xff0c;只有你自己知道哦~ 代码呢分两部分&#xff0c;一部分是client端跟server端两个。你只需要想办法让小伙伴运行你的client端脚本就OK啦。不过…

Vue中@click.stop与@click.prevent

Vue中click.stop与click.prevent 一、click.stop 问题&#xff1a;父元素中添加了一个click事件&#xff0c;其下面的子元素中也添加了click事件&#xff0c;此时&#xff0c;我想点击子元素获取子元素的点击事件&#xff0c;但却触发的是父元素的事件&#xff1a; <view cl…

ES6 promise

如何使用promise对象? 参考连接&#xff1a; http://es6.ruanyifeng.com/#docs/promise 转载于:https://www.cnblogs.com/taoshengyijiuai/p/6963279.html

巧用ThreadPool.QueueUserWorkItem实现接口二次调用

背景最近做了个项目有个接口涉及到批量计算的问题&#xff0c;耗时比较长。大家都知道&#xff0c;接口等待时间太长肯定是不可取的。那么只能做异步处理了&#xff1b;但是问题来了这个项目没有什么消息队列、redis之类的使用&#xff0c;本着怎么简单怎么来的思路&#xff0c…

el-upload 防止选择上传重复文件

<el-uploadref"uploadRef"multipledragaction"":auto-upload"false":file-list"msgPara.MsgFileList":on-change"handleFileChanged" ><el-button type"primary">选择文件</el-button> </el…

jmete 学习--基础之名词解释

一.jmeter 体系结构 1.名词解释 元件 jmemter工具菜单中的一个子菜单&#xff0c;如http请求&#xff0c;事务控制器等&#xff0c;就是一个元件。 组件 一组元件的集合&#xff0c;比如逻辑控制器中有事务控制器&#xff0c;仅一次控制器等&#xff0c;这些都是hi元件&#x…