實(shí)現(xiàn)自動(dòng)化部署的方式有很多捡偏,大家百度到的都是Jenkins。實(shí)際上CI/CD的方式還有很多。在博文中我至少列舉了三種形式介牙。第一種Jenkins 第二種TecmCity 第三種就是原生Git hooks實(shí)現(xiàn)逻杖。
0x1在服務(wù)器初始化一個(gè)遠(yuǎn)程git倉(cāng)庫(kù)
1) git init
和 git init --bare
的區(qū)別
初始化出來(lái)的倉(cāng)庫(kù)是不一樣的奋岁,前者初始化的是一個(gè)普通的倉(cāng)庫(kù),其中 .git
文件夾是隱藏的荸百,并且能看見(jiàn)該倉(cāng)庫(kù)下所有的源碼闻伶。而后者初始化出來(lái)的倉(cāng)庫(kù)中的文件,就是 .git
中的文件夾够话,但不能像前者那樣直接瀏覽或修改倉(cāng)庫(kù)中的代碼蓝翰。
2) 使用 git init --bare
初始化一個(gè)遠(yuǎn)程倉(cāng)庫(kù)。
該倉(cāng)庫(kù)是用于項(xiàng)目部署的女嘲。在我們本地開(kāi)發(fā)完成后畜份,將項(xiàng)目push至該倉(cāng)庫(kù)后,將自動(dòng)部署網(wǎng)站澡为。
[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) 網(wǎng)站的根目錄
[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) 為遠(yuǎn)程倉(cāng)庫(kù)設(shè)置一個(gè) 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 #此目錄為服務(wù)器頁(yè)面展示目錄
cd $DIR_ONE
git init
git remote add origin /home/git/project.git
#git clean -df
git pull origin master
echo "同步完成"
根據(jù)自己的業(yè)務(wù)需求漂坏,修改腳本實(shí)現(xiàn)不同的功能。
該腳本添加可執(zhí)行權(quán)限
[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已經(jīng)調(diào)用
[root@git hooks]# cd /var/www/html
[root@git html]# ls
404.html index.html readme.md
[root@git html]#
到/var/www/html 目錄中驗(yàn)證代碼已經(jīng)同步過(guò)來(lái)顶别。