git钩子与自动化部署(上)

1340.640.jpg


引言

以前我在这篇文章里面简单的介绍了一下git钩子,pre-commit与eslint的关系与做用git钩子与eslint
今天继续介绍另外的两个git钩子,以及使用它们来进行简单的自动化部署的两个例子。html

钩子分类

Git钩子就是git在特定的重要动做发生时触发自定义脚本。vue

钩子都被存储在 Git 目录下的 hooks 子目录中。 也即绝大部分项目中的 .git/hooks 。 当你用 git init 初始化一个新版本库时,Git 默认会在这个目录中放置一些示例脚本。这些示例的名字都是以 .sample 结尾,若是你想启用它们,得先移除这个后缀。react

Git 含有两种类型的钩子:客户端的和服务器端的。客户端的钩子pre-commit以前介绍过了nginx

和自动化部署有关的钩子有两个,一个是post-update,一个是github基于post-update封装的webhook
img.jpeggit

自动部署原理

这里先不谈docker和jeckins,你们先想想部署的原理是什么,
部署就是服务器展现目录里面的文件变成最新的文件便可
咱们能够手动把文件传上去,也能够进入服务器展现目录,让它去拉最新代码便可
若是咱们经过shell脚本让这个过程变成自动的,而且咱们能自动在某个时机执信shell脚本,是否是咱们就完成了自动化部署?github

post-update

定义

This hook reacts to git push and updates reference(s) in its repository. It executes on the remote repository once after all the refs have been updated.


自动部署过程

本地git push,远程仓库xxx-bar.git全部文件更新完触发这个钩子执行咱们的shell脚本,进入www目录(nginx上配置的展现目录),从xxx-bar.git拉最新文件,完成自动化部署web

实操

  1. ssh 链接到远程服务器 (看注意事项)
  2. 在/home/user目录下新建一个www目录 ,niginx展现页指向www/index.html
  3. 在/home/user下初始化一个裸库 git init --bare xxx-bare.git
  4. 进入xxx-bare.git/hooks,在相关钩子里编辑脚本docker

    cd /home/user/xxx-bare.git/hooks
    cp post-update.sample post-update
    vim post-update

    下面再编辑post-update脚本shell

    #!/bin/sh
    unset GIT_DIR 
    DIR_ONE=/home/user/www/  #此目录为服务器页面展现目录 
    cd $DIR_ONE
    git init
    git remote add origin /home/user/xxx-bare.git
    git clean -df
    git pull origin master          #核心代码,自动部署的本质
  5. 在本地test目录下 git clone 远程服务端刚才建立的裸库xxx-bare.gitvim

    git clone root@你本身服务器的ip:/home/user/xxx-bar.git
  6. 在本地刚克隆的xxx-bar.git里面随便添加一个index.html文件,而后git add .&& git commit -m 'dp' && git push
  7. 咱们能够看到,远程/home/user/www目录里面多了一个index.html,此时能够经过浏览器访问这个文件了
  8. 本地xxx-bar.git里改变index,而后git add .&& git commit -m 'dp' && git push,刷新浏览器,能够看到浏览器里面到网页也变化了,至此完成了自动化部署

注意事项

1.服务器权限的问题,我建议仍是我的拥有我的的服务器比较好,root权限,想怎么整就怎么整。若是用公司的服务器,ningx访问的时候跨目录可能出问题,ssh配置也可能出问题
这里强烈推荐一下腾讯云,最近作活动,88玩一年,安全耐操
0.1折服务器连接。买了不会玩的能够私聊我,三陪政策,包教包会.....

2.ssh怎么配

首先登陆远程服务器,命令行输入 ssh-keygen,生成ssh公钥私钥

其次本地首先看有没有~/.ssh目录,没有的化也执行上面的操做

而后 scp ~/.ssh/id_rsa.pub [遠端主機名稱]:~/.ssh/authorized_keys (把本地共钥复制到远程服务器authorized_keys这个文件中)

再在本地的~/.ssh中添加一个config文件,里面这么写

Host           qq
HostName      你的qq服务器ip
Port          22
User              root
IdentityFile    ~/.ssh/id_rsa

大功告成,当在控制台输入ssh qq 就自动脸上qq服务器了

总结

介绍了post-update钩子以及利用它进行简单自动化部署的实例。并对其中各类可能遇到的问题作了说明。但愿能给你们带来一些帮助。原本准备把webhook也写了的,可是因为篇幅缘由,只能在下篇文章中介绍webhook,以及利用webhook部署一个真实的vue项目啦。


题外话,写文章真的很辛苦,写了这么久了,居然一个打赏也没收到,已哭晕。有没有哪位大哥能给个打赏,让我开开荤,支持支持我呗......

相关文章
相关标签/搜索