美文网首页Git@IT·互联网程序员
如何使用 Git Hook 自动部署服务器?

如何使用 Git Hook 自动部署服务器?

作者: 闭眼卖布 | 来源:发表于2017-06-20 02:26 被阅读859次

一行命令,自动将本地文件部署到远程服务器上。

最近搭了个个人网站,在放到服务器上时,考虑到,如果每次更新的内容,都要用 FTP 或者别的文件传输方式,将文件一个个的放到服务器上,简直是太麻烦了,有没有什么办法更好,更快的完成部署呢?

使用 Git Hooks(Git 钩子),可以做到这点。Git Hooks 是什么?「Git 能在特定的重要动作发生时触发自定义脚本」,比如说pre-commit, post-receive等等,在这些动作之前或者之后,会运行定义好的脚本。要做到自动部署,就是要用到这个 post-receive

在设置自动部署前,先要设置无密码登录远程服务器,具体操作可以参考这篇文章。[ SSH Key 无密码登录服务器 ]

自动部署

整个流程大概是:在服务器端创建一个 Git 仓库(repository),然后将本地的文件使用 git push 上传到这个仓库后,将上传到Git 仓库的文件,自动复制到服务器里网页运行的文件夹下。

  1. 在服务器端,创建一个 Git 仓库,
git init --bare website.git
  1. 创建 post-receive文件
cd website.git
vim hooks/post-receive

将以下内容复制到post-receive文件里

#!/bin/bash -l
GIT_REPO=/home/git/website.git
TMP_GIT_CLONE=/tmp/website
PUBLIC_WWW=/var/www/zhuangweiming.me/html
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
cd $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

代码解释:
rm -rf ${TMP_GIT_CLONE}清空临时路径里面的内容
git clone $GIT_REPO $TMP_GIT_CLONE将 Git 仓库的内容克隆到临时路径
rm -rf ${PUBLIC_WWW}/*清空服务器网页存放文件夹
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}将临时路径里的文件复制到服务器网页存放路径

  1. post-receive 文件授权
chmod +x hooks/post-receive
  1. 本地添加 Git 远程仓库,测试
git remote add deploy ssh://git@128.199.169.239/home/git/website.git
git push deploy

自动部署指定的 Git branch

如果是要部署特定的 branch,在上述第二部中,将 post-receive 的文件内容替换为:

#!/bin/bash -l
while read oldrev newrev ref
do
  branch=`echo $ref | cut -d/ -f3`
  if [ "master" == "$branch" ] || [ "production" == "$branch" ]; then
    GIT_REPO=/home/git/website.git
    TMP_GIT_CLONE=/tmp/website
    PUBLIC_WWW=/var/www/zhuangweiming.me/html
    rm -rf ${TMP_GIT_CLONE}
    git clone $GIT_REPO $TMP_GIT_CLONE
    cd $TMP_GIT_CLONE
    unset GIT_DIR
    git checkout $branch
    rm -rf ${PUBLIC_WWW}/*
    cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
  fi
done

相关文章

  • 如何使用 Git Hook 自动部署服务器?

    一行命令,自动将本地文件部署到远程服务器上。 最近搭了个个人网站,在放到服务器上时,考虑到,如果每次更新的内容,都...

  • git自动部署代码

    git自动部署代码服务器创建裸仓库: 配置自动部署代码的脚本: 权限问题:git:git nginx:www...

  • git hook 自动部署

    创建远程仓库 在服务器clone一个仓库 为远程仓库编写hook post-receive 里的脚本 给post-...

  • 通过Git Hooks实现自动部署

    以前尝试部署代码到服务器的方式有用到Github Hook或者ftp,但使用起来都有各自的缺陷,然后就发现了git...

  • Hooks实现自动化部署

    以前尝试部署代码到服务器的方式有用到Github Hook或者ftp,但使用起来都有各自的缺陷,然后就发现了git...

  • CI/CD初探 (Drone+Docker)

    将使用 docker + docker compose + drone + git 实现项目自动部署 使用dock...

  • CI/CD初探(docker+drone)

    将使用 docker + docker compose + drone + git 实现项目自动部署 使用dock...

  • Git hook与网站自动部署

    git hook 一般来说,在服务器部署的时候不建议在网站的根目录建立远程仓库,一是处于安全考虑,二是以下情形:因...

  • Git服务器搭建及自动化部署

    Git简单易用,为了方便自己,满足好奇心,我学习了下如何搭建git服务器并实现自动化部署,在这里将自己遇到的坑跟大...

  • gerrit使用记录

    要像自动拉去钩子文件并能够自动放入.git/hook/目录下, 请使用ssh协议. http协议经测试不能成功. ...

网友评论

    本文标题:如何使用 Git Hook 自动部署服务器?

    本文链接:https://www.haomeiwen.com/subject/rkzjqxtx.html