zoukankan      html  css  js  c++  java
  • 使用 Git Hook 实现网站的自动部署

    转自 https://www.cnblogs.com/c-shang/p/git.html

    自动部署理论

    首先要明确代码的分布情况,开发者电脑上的本地仓库、git服务器上的远端仓库、web服务器上的另一个本地仓库(浏览器访问的就是这里的代码)。实自动部署就是要当从开发者本地仓库提交代码到远端仓库的时候,自动把代码部署到web服务器的本地仓库,实现开发者本地仓库和web服务器的本地仓库的同步。(即通过GitHook中的post-receive脚本文件)

    安装过程

    1)在服务器上创建一个裸仓库(git服务器上的远端仓库)

    cd   /home/workspace/
    git  init  --bare  bim.git

     # Git 全局设置

    git config --global user.name "xxxxx"
    git config --global user.email "xxxxx@xxx.com"

    在服务器上创建一个普通Git仓库,用于存放网站的源代码(web服务器上的另一个本地仓库)

    mkdir  /www/wwwroot/workspace
    cd  /www/wwwroot/workspace
    git  clone  /home/workspace/bim.git

    配置Git Hook

    进入到/home/workspace/bim.git/hooks文件夹,使用vi post-receive创建一个脚本,当你在本地仓库执行git push后就会触发post-receive。 
    post-receive的内容如下:

    #!/bin/sh


    #判断是不是远端仓库

    IS_BARE=$(git rev-parse --is-bare-repository)
    if [ -z "$IS_BARE" ]; then
    echo >&2 "fatal: post-receive: IS_NOT_BARE"
    exit 1
    fi

    unset GIT_DIR
    DeployPath="/www/wwwroot/bim"
    GitPath=$DeployPath/.git
    echo "pwd"|sudo -S chown bim:bim -R $DeployPath #权限问题处理

    cd $DeployPath

    git stash

    git pull origin master

    echo "pwd"|sudo -S chown www:www -R $DeployPath
    echo "pwd"|sudo -S chown bim:bim -R $GitPath

    #git fetch --all
    #git reset --hard origin/master


    #time=`date`
    #echo "web server pull at webserver at time: $time."

    保存后赋予可执行权限:

    chmod  +x  /var/www/workspace/springSummary/hooks/post-receive

    配置开发者电脑上的本地仓库的.git/config,添加

    [receive] 
      denyCurrentBranch = ignore

    为开发者电脑上的本地仓库添加 remote 源:

    // 默认ssh端口号为22时
    git remote add deploy user@server.ip:/home/workspace/bim.git
    // ssh端口号为不22时
    git  remote  add  deploy  ssh://user@server.ip:port/home/workspace/bim.git
    
    

    以后往这个 remote 源里面 push 代码就会自动触发上面那 bash 脚本实现自动部署

    git  push  deploy  master

    git fetch与git pull实现的区别在于:

    git fetch:相当于是从远程获取最新版本到本地,不会自动merge。

    git pull:相当于是从远程获取最新版本并merge到本地。

    pull实现相当于fetch后再用merge,来合并本地和远端的代码。

    这里就有个问题,如果开发者在提交过程出现失误,使用git reset复位后,现在远端的代码版本低于web端的代码版本,再使用pull的时候就不能实现和开发者本地的代码的同步。所以这里使用fetch后,在强制使用reset实现web端的代码版本指针和git服务端的一致。(如果在本机可以使用stash,然后pull,然后drop刚才stash的内容)

  • 相关阅读:
    如何加快建 index 索引 的时间
    RMAN 系列(一) RMAN 体系结构概述
    RMAN 系列(二) RMAN 设置和配置
    对 Oracle 备份与恢复 的补充说明
    Oracle 11g Alert log 文件位置的问题
    Oracle 索引的维护
    分区表 之 Interval分区 和 虚拟列 按星期分区表
    Oracle 小知识 总结(一)
    如何用 SQL Tuning Advisor (STA) 优化SQL语句
    使用 Tkprof 分析 ORACLE 跟踪文件
  • 原文地址:https://www.cnblogs.com/wowchky/p/9177036.html
Copyright © 2011-2022 走看看