实现自动化部署的方式有很多,大家百度到的都是Jenkins。实际上CI/CD的方式还有很多。在博文中我至少列举了三种形式。第一种Jenkins 第二种TecmCity 第三种就是原生Git hooks实现。
0x1在服务器初始化一个远程git仓库
1) git init
和 git init --bare
的区别
初始化出来的仓库是不一样的,前者初始化的是一个普通的仓库,其中 .git
文件夹是隐藏的,并且能看见该仓库下所有的源码。而后者初始化出来的仓库中的文件,就是 .git
中的文件夹,但不能像前者那样直接浏览或修改仓库中的代码。
2) 使用 git init --bare
初始化一个远程仓库。
该仓库是用于项目部署的。在我们本地开发完成后,将项目push至该仓库后,将自动部署网站。
[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) 网站的根目录
[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
[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
#!/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 "同步完成"
根据自己的业务需求,修改脚本实现不同的功能。
该脚本添加可执行权限
[root@git hooks] chmod +x post-update
5) 在客户端提交代码检查/var/www/html是否有推送
[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已经调用
[root@git hooks]# cd /var/www/html
[root@git html]# ls
404.html index.html readme.md
[root@git html]#
到/var/www/html 目录中验证代码已经同步过来。