linux服务器中建立git仓库,并创建钩子实现生产代码同步更新

796 阅读1分钟

1、下载git,并安装git需要的插件和扩展

# yum install git
# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel

2、创建git用户组和用户,用来运行git服务

# groupadd git
# useradd git -g git

3、创建证书登录

创建用于保存用户公钥信息的文件authorized_keys

# cd /home/git/
# mkdir .ssh
# chmod 755 .ssh
# touch .ssh/authorized_keys
# chmod 644 .ssh/authorized_keys

本地window和linux创建ssh key

# ssh-keygen -t rsa -c '你的邮箱地址'

window中的用户主目录下会出现一个.ssh文件夹,其中为SSH Key的秘钥对,id_rsa是私钥,id_rsa.pub是公钥

linux中的SSH Key的秘钥对在root目录下

将刚生成的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个

4、初始化Git仓库

随便选定一个目录作为Git仓库,这里我选的是/home

# cd /home/
# mkdir gitstore
# chown git:git gitstore/  // 设置目录所有者为git用户组
# cd gitstore/
# git init --bare myproject.git
# chown -R git:git myproject.git/

5、Git服务器打开RSA认证

在Git服务器上需要将/etc/ssh/sshd_config中将RSA认证打开,即:

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

6、克隆仓库

$ git clone git@127.45.36.125:/home/gitstore/myproject.git

如果出现了Host key verification failed的错误,可能是你以前通过ssh链接过该服务器,之后服务器重装过系统,需要清空下本地ip密码记录

window在用户主目录下.ssh文件夹中known_hosts文件,删除该文件或者打开文件删除对应服务器的那行记录即可

7、禁用git用户的shell登陆

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash
最后一个冒号后改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

8、配置钩子实现客户端push时 代码自动更新

# cd /home/gitstore/myproject.git/hooks
# vi post-receive  //输入

#!/bin/sh
export LANG=zh_CN.UTF-8;
GIT=/usr/bin/git;
PROJECT_PATH=/data/wwwroot/default/myproject;  // 你的web目录的地址
unset GIT_DIR;
cd $PROJECT_PATH;
# /usr/bin/git reset --hard #这里直接丢弃工作区的内容,防止出现一些奇怪的错误。web目录只做pull,不在这里修改东西
$GIT pull;

保存退出 赋予可执行权限

# chown git:git post-receive
# chmod a+x post-receive

第一次需要在myproject目录下clone一份代码

# cd /data/wwwroot/default/myproject
# git clone /home/gitstore/myproject.git

之后本地代码修改提交后,服务的代码也会同步修改