OnlyTL

OnlyTL

SVN配置提交代码自动部署

1071
2021-12-18
SVN配置提交代码自动部署

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/sh
    
    export 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目录文件已更新。