gitlab 使用原始的hooks同步到某一个目录

更新
发现一个很严重的问题,就是原始的gitlab-shell的hooks的东西绝对不能修改,还得必须是原来的东西。

post-receive还得是这个,如果改成git --work-tree=$web_dir checkout -f,去git拉取代码好像都不是最新的,慎重


#!/usr/bin/env ruby

# This file was placed here by GitLab. It makes sure that your pushed commits
# will be processed properly.

refs = ARGF.read
key_id  = ENV['GL_ID']
repo_path = Dir.pwd

# reset GL_ID env since we already got its value
ENV['GL_ID'] = nil

require_relative '../lib/gitlab_custom_hook'
require_relative '../lib/gitlab_post_receive'

if GitlabPostReceive.new(repo_path, key_id, refs).exec &&
    GitlabCustomHook.new.post_receive(refs, repo_path)
  exit 0
else
  exit 1
end
具体总结
su - git
cd /opt/git/repositories/xx/xx.git
rm -rf hooks
cp -r /opt/git/gitlab-shell/hooks ./
cd hooks
rm -rf pre-receive update
ln -s /opt/git/gitlab-shell/hooks/pre-receive  pre-receive
ln -s /opt/git/gitlab-shell/hooks/update update
vim  post-receive
#!/bin/bash
web_dir=/opt/xx/xx/
git --work-tree=$web_dir checkout -f

git checkout不够好,更进一步看下面的链接

利用git push向服务器一键部署代码 //

gitlab hook 加了expect


有时候,不需要定时同步。

参考上面的链接

#!/bin/sh

cur_dir=$(pwd)

web_dir=/opt/webroot/gitlab_hook/

#echo $cur_dir"/hooks" > /tmp/gitlab_hook_cur_dir.txt

#echo `whoami` > /tmp/gitlab_hook.txt

GIT_WORK_TREE=$web_dir git checkout -f

$cur_dir"/hooks/web_rsync" $web_dir   > /tmp/gitlab_hook_rsync.log


web_rsync

#!/bin/bash

#ROOT="/data/www/wwwroot/bbs.linuxtone.org/"

SITE="xx"

USER="root"

PASSWORD="xx"

RSYNC_OPTS="-e \\\"ssh -p22 -o StrictHostKeyChecking=no\\\" -azuv --progress --exclude ".git" --bwlimit=150 --timeout=1200 -l"


auto_rsync() {

   expect -c "eval spawn -noecho rsync $RSYNC_OPTS $1 $2

      expect \"*?assword:*\"

      send -- \"$PASSWORD\r\"

      expect eof"

}


sync() {

   FILE=$(basename $1)

   DEST=$(dirname $1)

   SRC=$1

   # download remote site file to current location

   #auto_rsync $USER@$SITE:$ROOT$FILE $DEST

   auto_rsync   $SRC  $USER@$SITE:$DEST 

   # update remote site file if newer than backup

   #auto_rsync $1 $USER@$SITE:$ROOT

}


# Remote file Directory

sync "/home/post-receive"


你可能感兴趣的:(hooks)