Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大项目。Git是Linus Torvalds为帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git与常用的版本控制工具CVS、Subversion等不同,它采用分布式版本库的方式,不必服务器端软件支持。

实现自动化部署的方式有很多,大家百度到的都是Jenkins。实际上CI/CD的方式还有很多。在博文中我至少列举了三种形式。第一种Jenkins 第二种TecmCity 第三种就是原生Git hooks实现。

Centos7.x Git服务器部署教程参考

0x1在服务器初始化一个远程git仓库

1) git initgit init --bare 的区别

初始化出来的仓库是不一样的,前者初始化的是一个普通的仓库,其中 .git 文件夹是隐藏的,并且能看见该仓库下所有的源码。而后者初始化出来的仓库中的文件,就是 .git 中的文件夹,但不能像前者那样直接浏览或修改仓库中的代码。

2) 使用 git init --bare 初始化一个远程仓库。

该仓库是用于项目部署的。在我们本地开发完成后,将项目push至该仓库后,将自动部署网站。

1
2
3
4
5
6
7
8
[root@git git]# git init --bar project.git
Initialized empty Git repository in /home/git/project.git/
[root@git git]# ls
project.git
[root@git git]# cd project.git/
[root@git project.git]# ls
branches config description HEAD hooks info objects refs
[root@git project.git]#

3) 网站的根目录

1
2
3
4
5
6
[root@git www]# chown -R git:git html
[root@git www]# cd html/
[root@git html]# ls
[root@git html]# ls
index.html readme.md
[root@git html]#

4) 为远程仓库设置一个 hook

1
2
3
4
5
6
7
[root@git git]# cd project.git/
[root@git project.git]# ls
branches config description HEAD hooks info objects refs
[root@git project.git]# cd hooks
[root@git hooks]#
[root@git hooks]# cp post-update.sample post-update
vim`编辑`post-update
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

#exec git update-server-info
unset GIT_DIR
DIR_ONE=/var/www/html #此目录为服务器页面展示目录
cd $DIR_ONE
git init
git remote add origin /home/git/project.git
#git clean -df
git pull origin master
echo "同步完成"

根据自己的业务需求,修改脚本实现不同的功能。

该脚本添加可执行权限

1
[root@git hooks] chmod +x post-update

5) 在客户端提交代码检查/var/www/html是否有推送

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@web01 project]# touch 404.html
[root@web01 project]# git add .
[root@web01 project]# git commit -m "add index1.html"
[master 8beace1] add index1.html
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 404.html
[root@web01 project]# git remote add origin git@192.168.0.109:/home/git/project.git
fatal: remote origin already exists.
[root@web01 project]# git push origin master
git@192.168.0.109's password:
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 249 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
remote: Reinitialized existing Git repository in /var/www/html/.git/
remote: fatal: remote origin already exists.
remote: From /home/git/project
remote: * branch master -> FETCH_HEAD
remote: 0ce3c62..8beace1 master -> origin/master
remote: Updating 0ce3c62..8beace1
remote: Fast-forward
remote: 404.html | 0
remote: 1 file changed, 0 insertions(+), 0 deletions(-)
remote: create mode 100644 404.html
remote: 同步完成!
To git@192.168.0.109:/home/git/project.git
0ce3c62..8beace1 master -> master
[root@web01 project]#

显示同步完成!证明hooks已经调用

1
2
3
4
[root@git hooks]# cd /var/www/html
[root@git html]# ls
404.html index.html readme.md
[root@git html]#

到/var/www/html 目录中验证代码已经同步过来。

评论