新版博客SEO优化基本完成,新老博客内容正在整合中,保证每篇文章高质量。 SiteMap RSS Github
GitHook实现项目自动化部署
嘉美伯爵   2019年9月15日 17:55   运维   Git   160  

服务器实现

git服务器搭建

  • 1、安装git
sudo apt-get install git
  • 2、建立git用户,仅仅用于完成git操作
sudo adduser git
  • 3、添加公钥

将自己id_rsa.pub中的文件,复制到/home/git/.ssh/authorized_keys中,一行一个

mkdir -p /home/git/.ssh/
cd /home/git/.ssh/
touch authorized_keys

  • 4、初始化Git仓库

git init --bare 建立一个裸仓库,只做存储用,看不到代码;git init 可以看到所有信息,通常我们使用 git init --bare

# 建立git仓库
mkdir -p /home/gitrepo/fovegage.git
# 初始化仓库
cd /home/gitrepo/fovegage.git
sudo git init --bare
# 权限变更
sudo chown -R git:git fovegage.git
  • 5、禁止shell登录
vi /etc/passwd
git:x:1001:1001::/home/git:/bin/bash (修改成下面的)
git:x:1001:1001::/home/git:/usr/local/git/bin/git-shell
  • 6、配置用户信息

  • 7、本地代码提交到远程

  • 8、test hooks设置

在项目目录下新建 post-receive,每次git push 会执行该脚本

vi post-receive
#!/bin/sh  
chmod -R 777 /home/testhook
cd /home/testhook
git clone /home/gitrepo/tools.git
unset GIT_DIR
git reset --hard
  • 9、online hooks设置
#!/bin/sh

# 同步最新代码
cd /data/wwwroot/deploy/tools
chown -R git:git /data/wwwroot/deploy/tools/
# git clone /home/gitrepo/tools.git
unset GIT_DIR
git reset --hard

git fetch
git merge origin/master

sudo docker cp /data/wwwroot/deploy/tools/ tools:/data/wwwroot/deploy/tools
sudo docker exec -i tools /bin/bash -c ' cp -r tools/* ./ && rm -rf tools'
sudo docker restart tools

码云或github实现

  • 当我们设置webhooks后,每当我们git push后码云会想我们填写的地址发送一个post请求

  • git push 后接收到的数据

到这里我们可以挂一个服务来监听码云或GitHub发来的post请求,当收到请求就进行git clone 等一系列操作

  • 判断是否码云推送

在我们填写推送地址的时候,会附带写一个密码,从而可以判断请求是否码云发送

参考文档

GitHook实现Django自动化部署

搭建Git服务器

git hook实现代码自动部署