gitlab 使用 custom_hooks 自动化更新服务器上的代码

自动化部署:

gitlab在客户端push上传代码后,服务器自动更新代码到项目目录中

1、切换到服务器上项目的gitlab目录,创建custom_hooks自定义钩子目录

# 切换到项目gitlab目录
[root@iZwz90o2a8lpw2xgmh9bqpZ ~]# cd /var/opt/gitlab/git-data/repositories/@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git/
[root@iZwz90o2a8lpw2xgmh9bqpZ 2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git]# ls -la
total 12
drwxr-s--- 6 git git 103 Mar  4 10:23 .
drwxr-s--- 4 git git 163 Mar  4 10:23 ..
-rw-r--r-- 1 git git 105 Mar  4 10:23 config
-rw-r--r-- 1 git git  73 Mar  4 10:23 description
-rw-r--r-- 1 git git  23 Mar  4 10:23 HEAD
drwxr-sr-x 2 git git 332 Mar  4 10:23 hooks
drwxr-sr-x 2 git git  21 Mar  4 10:23 info
drwxr-sr-x 4 git git  30 Mar  4 10:23 objects
drwxr-sr-x 4 git git  31 Mar  4 10:23 refs

# 创建目录 并 赋予权限
[root@iZwz90o2a8lpw2xgmh9bqpZ 2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git]# mkdir custom_hooks
[root@iZwz90o2a8lpw2xgmh9bqpZ 2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git]# chmod 777 custom_hooks
[root@iZwz90o2a8lpw2xgmh9bqpZ 2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git]# ls -la
total 12
drwxr-s--- 7 git  git 123 Mar  4 10:38 .
drwxr-s--- 4 git  git 163 Mar  4 10:23 ..
-rw-r--r-- 1 git  git 105 Mar  4 10:23 config
drwxrwsrwx 2 root git   6 Mar  4 10:38 custom_hooks
-rw-r--r-- 1 git  git  73 Mar  4 10:23 description
-rw-r--r-- 1 git  git  23 Mar  4 10:23 HEAD
drwxr-sr-x 2 git  git 332 Mar  4 10:23 hooks
drwxr-sr-x 2 git  git  21 Mar  4 10:23 info
drwxr-sr-x 4 git  git  30 Mar  4 10:23 objects
drwxr-sr-x 4 git  git  31 Mar  4 10:23 refs

2、切换到custom_hooks目录里,创建 post-receive 文件,添加以下内容并保存退出,并赋予权限

[root@iZwz90o2a8lpw2xgmh9bqpZ 2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git]# cd custom_hooks/
[root@iZwz90o2a8lpw2xgmh9bqpZ 2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git]# vi post-receive
#!/bin/sh

unset GIT_DIR
cd 你项目的根目录绝对路径 && git reset --hard && git pull origin master

 

[root@iZwz90o2a8lpw2xgmh9bqpZ custom_hooks]# chmod 777 post-receive 
[root@iZwz90o2a8lpw2xgmh9bqpZ custom_hooks]# ls -la
total 4
drwxrwsrwx 2 root git  26 Mar  4 10:50 .
drwxr-s--- 7 git  git 123 Mar  4 10:50 ..
-rwxrwxrwx 1 root git 116 Mar  4 10:50 post-receive

3、在服务器上,把项目clone下来,并编辑 .git/config 配置

切换到 /data ,然后 clone 项目

[root@iZwz90o2a8lpw2xgmh9bqpZ custom_hooks]# cd /data
[root@iZwz90o2a8lpw2xgmh9bqpZ data]# git clone 项目的gitlab地址

切换到 项目根目录,编辑 .git/config 配置

[root@iZwz90o2a8lpw2xgmh9bqpZ data]# cd 项目根目录/
[root@iZwz90o2a8lpw2xgmh9bqpZ 项目根目录]# vi .git/config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = http://gitlab用户名:gitlab密码@项目gitlab地址
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master 

保存并退出即可

4、在gitlab客户端 push上传后,即可在服务器上 你项目的根目录绝对路径 看到上传的文件

 

错误处理

1、如果出现以下错误 warning:Pulling without specifying how to reconcile divergent branches is
discouraged

-------------
warning: Pulling without specifying how to reconcile divergent branches is
discouraged. You can squelch this message by running one of the following
commands sometime before your next pull:

  git config pull.rebase false  # merge (the default strategy)
  git config pull.rebase true   # rebase
  git config pull.ff only       # fast-forward only

You can replace "git config" with "git config --global" to set a default
preference for all repositories. You can also pass --rebase, --no-rebase,
or --ff-only on the command line to override the configured default per
invocation.

From gitlab项目地址
 * branch            master     -> FETCH_HEAD
Already up to date.

则修改post-receive 文件为

#!/bin/sh

unset GIT_DIR
cd 你项目的根目录绝对路径 && git reset --hard && git pull origin master --ff-only

2、如果出现以下错误fatal: refusing to merge unrelated histories

HEAD is now at ffca2d1 
From gitlab项目地址
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

则修改post-receive 文件为

#!/bin/sh

unset GIT_DIR
cd 你项目的根目录绝对路径 && git reset --hard && git pull origin master --allow-unrelated-histories


3、如果git push时出现以下错误 remote: error: update_ref failed for ref 'HEAD': cannot update the ref 'HEAD': unable to append to '.git/logs/HEAD': Permission denied

git push
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 12 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 435 bytes | 435.00 KiB/s, done.
Total 5 (delta 3), reused 0 (delta 0), pack-reused 0
remote: --------------
remote: error: update_ref failed for ref 'HEAD': cannot update the ref 'HEAD': unable to append to '.git/logs/HEAD': Permission denied

则在客户端运行命令:chown -R "${USER:-$(id -un)}" .   然后重新提交即可

#运行命令

chown -R "${USER:-$(id -un)}" .

#重新提交
git add .
git commit -m "Changed"
git push origin master

#即可
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 12 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 438 bytes | 438.00 KiB/s, done.
Total 5 (delta 3), reused 0 (delta 0), pack-reused 0
remote: --------------
remote: Updating files: 100% (10190/10190), done.
remote: HEAD is now at 1f123398 Changed
remote:  * branch              master     -> FETCH_HEAD
remote:    1f123398..35963c22  master     -> origin/master
remote: Updating 1f123398..35963c22
remote: Fast-forward
remote:  4 files changed, 10 insertions(+), 10 deletions(-)
   54314a9e..35963c22  master -> master

4、如果出现error: The following untracked working tree files would be overwritten by merge

则修改post-receive 文件为

#!/bin/sh

unset GIT_DIR
cd 你项目的根目录绝对路径 && git reset --hard && git clean -d -fx && git pull origin master --allow-unrelated-histories


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值