利用Git进行自动化多分支部署

创建Git用户用于自动部署

新建用户

useradd git

设置密码

passwd git

配置无法shell登录

1
vi /etc/passwd
2
git:x:1000:1000::/home/git:/usr/bin/git-shell

云端自动部署配置

新建裸仓库

1
git init --bare /opt/webapps/project-bare.git
2
cd /opt/webapps/project-bare.git/hooks
3
cp post-update.sample post-update
4
vi post-update

多分支部署

1
#!/bin/sh
2
3
unset GIT_DIR
4
mkdir -p /opt/webapps/project
5
cd /opt/webapps/project || exit
6
7
# 获取当前分支和目标分支
8
CURR_BRANCH=$(git symbolic-ref --short -q HEAD)
9
echo "current branch: ${CURR_BRANCH}"
10
TARGET_BRANCH=$(echo "$1" | awk -F/ '{print $3}')
11
echo "target branch: ${TARGET_BRANCH}"
12
13
# 初始化仓库
14
git init
15
git remote add origin /opt/webapps/project-bare.git
16
# 清除未跟踪或未暂存的代码
17
git reset --hard
18
git clean -df
19
20
# 拉取远端所有分支最新代码
21
git fetch origin
22
# 如果是删除分支操作,则切到master分支并删除该分支,要求不能删除远端master分支
23
if [ ! -f "/opt/webapps/project-bare.git/refs/heads/${TARGET_BRANCH}" ]
24
then
25
    echo "target branch ${TARGET_BRANCH} has been deleted"
26
    # 如果是当前分支,需要切换到master分支
27
    if [ "${TARGET_BRANCH}" = "${CURR_BRANCH}" ]
28
    then
29
        git checkout master
30
    fi
31
    # 删除本地同名分支
32
    git branch -D "${TARGET_BRANCH}"
33
else
34
    if [ "${TARGET_BRANCH}" = "${CURR_BRANCH}" ]
35
    then
36
        echo "same branch! rebase origin/${TARGET_BRANCH}."
37
        git rebase origin/"${TARGET_BRANCH}"
38
    else
39
        echo "different branch! checkout to ${TARGET_BRANCH}."
40
        git branch -D "${TARGET_BRANCH}"
41
        git checkout -b "${TARGET_BRANCH}" origin/"${TARGET_BRANCH}"
42
    fi
43
fi
44
45
echo "pull done"
46
47
# 业务服务启动逻辑
48
npm install
49
50
rm -rf dist
51
npm run build
52
53
pm2 restart project
54
echo "deployment done"

设置权限

1
chown -R git.git /opt/webapps/project-bare.git

新建代码仓库目录

1
mkdir /opt/webapps/project
2
chown -R git.git /opt/webapps/project

本地设置自动部署

1
git remote add deployment git@www.huhaoyu.com:/opt/webapps/project-bare.git
2
git push deployment master

git整理commit的基本方法

觉得整理commit还是非常重要的一种技能,看到有人已经很好地整理过了,也搬运到自己的博客中,以备不时之需。本文转载自:Git整理Patch的一些经验

U-Boot升级到了最后,需要将之前比较杂乱的commit重新整理,有的需要整合,有的需要拆分。在这个过程中深刻的体会到了git的强大和灵活性。这里总结一下大的步骤和中间用到的各种小技巧。

步骤

commands usage
git checkout –b 新建一个branch来做整理的工作,保持原来的branch作为工作记录
git rebase –i 在新建的branch上,用rebase -i接squash的方法,将所有零碎的commit合成一个
git reset –soft HEAD~1 这一步只将object store还原到working_base上。所有需要整理的改动都留在index上,以备下一步做stash
git stash save “stash message” 将所有的改动放进stash中

至此,我们有了一个工作的基础,所有杂乱的commit被合成一个,并被放进stash中,以备后面一点点的commit进去。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×