版本更新发布WEB化(1)_构建基于git的更新发布架构

前言

这个版本更新发布架构不是最好的,是根据实际环境和需求构建的是一个可行稳定的架构,该架构基于git且只需要git的一点点功能就可以实现。

  1. 用一台服务器担当git server的角色,所有项目的代码均在上面提交和更新。
  2. 测试环境和正式环境用的代码均从git server获取(在本地用git pull命令从git server上面拉到本地的某个目录,这些动作在主要由salt来完成)。
  3. 为了保证代码更新的实时性,本地代码不直接拉到正式环境的目录B,而是采用了折中的方法先git pull到本地正式环境服务器临时目录A,然后再用rsync命令将目录A同步到本地正式环境目录B。
git server 设置

1、git init初始化一个版本库,用于提交更新的代码(即个人使用的版本库)。

1
2
3
4
5
6
$ git init strong.work 
Initialized empty Git repository in /opt/git/strong/strong.work/.git/
$ ls
strong.work
$ ls -a strong.work/
. .. .git

2、git init --bare初始化一个空的版本库,以后用于向各个线上、测试、开发等提供pull、push 服务的固定版本库(即共用的库、远程库)。

1
2
3
4
5
6
$ git init --bare strong.server 
Initialized empty Git repository in /opt/git/strong/strong.server/
$ ls
strong.server strong.work
$ ls strong.server/
branches config description HEAD hooks info objects refs

3、安装git-Daemon服务,通过网络向各个客户端提供pull、push等服务。

1
2
3
4
5
6
7
$ yum install git-daemon
$ nohup git daemon --base-path=/opt/git --export-all --port=9400 --listen=你的服务器地址 --verbose --reuseaddr --user=www &
[1] 26947
$ netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 你的服务器地址:9400 0.0.0.0:* LISTEN 26948/git-daemon

服务已经成功在后台运行,可以看到已经在监听指定的端口了。此时防火墙要开放9400端口(端口号没有特别的需求,只要与git pull时一致即可)。

4、客服端(线上正式或测试环境的代码目录)也要按照第一步的操作git init初始化一个版本库,用于git pull接收代码(即个人使用的版本库,后面有示例)。

流程演示

演示一个文件从git server服务器的stong.work目录添加提交然后push到stong.server目录,最后客户端将文件pull到本地目录的过程。
向strong.work目录添加一个文件test

1
$ echo " this is test" > test

添加新增文件的索引

1
$ git add .

显示状态

1
2
3
4
5
6
7
8
9
10
git status 
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: test
#

向仓库提文件的改变(提示没有设置使用者的用户名及邮箱,可以按提示命令设置。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ git commit -a -m 'test' 
[master (root-commit) fef0816] test
Committer: root <root@SH-BA-01-MAN.(none)>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

git config --global user.name "Your Name"
git config --global user.email you@example.com
If the identity used for this commit is wrong, you can fix it with:

git commit --amend --author='Your Name <you@example.com>'
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 test

将改变提交到远程库strong.server(strong.work和strong.server可以在同一台主机)

1
2
3
4
5
6
7
$ git push /opt/git/strong/strong.server/ master 
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /opt/git/strong/strong.server/
* [new branch] master -> master

登录客户端(线上正式或测试环境的代码目录)主机第一次pull时需要初始化一个git库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ git init strong.git 
Initialized empty Git repository in /home/strong.git/.git/
$ cd strong.git/
$ ls
$ git pull git://你的server服务器地址:9400/strong/strong.server master
[27027] Connection from 10.0.0.252:47433
[27027] Extended attributes (22 bytes) exist <host=你的server服务器地址:9400>
[27027] Request upload-pack for '/strong/strong.server'
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
[26948] [27027] Disconnected
Unpacking objects: 100% (3/3), done.
From git://10.0.0.252:9400/strong/strong.server
* branch master -> FETCH_HEAD
$ ls test
$ cat test this is test
----------------本文结束 感谢阅读----------------