Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
hel-developer-guide
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hel-guide
hel-developer-guide
Commits
d723c872
Commit
d723c872
authored
Apr 08, 2018
by
yang
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'undefined' into 'master'
添加git生成编译的增量包说明 See merge request !2
parents
c3282dc5
6b318e2f
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
290 additions
and
0 deletions
+290
-0
git生成编译的增量包说明.md
后端开发/git生成编译的增量包说明.md
+290
-0
No files found.
后端开发/git生成编译的增量包说明.md
0 → 100644
View file @
d723c872
## git生成编译的增量包说明
### 一、环境安装
#### Windows
1.
安装git-bash
[
下载
](
https://git-scm.com/downloads
)
git-bash并安装.
2.
安装python
到
[
官网
](
https://www.python.org/downloads/windows/
)
下载python并安装.
3.
配置环境变量
在高级系统设置里选择环境变量设置,然后点开系统变量的配置,修改PATH变量,把python的安装目录添加进去即可,例如C:
\P
ython27.
#### MacOS
1.
安装homebrew
打开终端,输入如下命令:
```
shell
$
/usr/bin/ruby
-e
"
$(
curl
-fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install
)
"
```
2. 安装python
终端输入如下命令:
```
shell
$
brew
install
python3
#也可安装python2,MacOS应该自带
# $ brew install python
```
### 二、拷贝脚本
到融租易
(
hel-leasing
)
项目下把archives.py和gen_patch.sh两个文件拷贝到需要生成增量包的项目的根目录下,或者直接复制如下代码为gen_patch.sh和archives.py两个文件放到项目的根目录下:
*
gen_patch.sh
```
shell
#!/bin/sh
#
# Generate compiled patch file automatically
#
################################################
#
# Set Script Variables
#
GENERATE_FOLDER=/Users/weck/Downloads/patch/ #生成差异包的目录
GIT_BRANCH=HLS-DEV #分支
SINCE_DATE="2018-04-02 00:00:00" #时间
AUTHOR=gaoyang #提交人
git checkout "$GIT_BRANCH" &&
git pull
#if [ -n "$AUTHOR" ]; then
# COMMIT_IDS=`git rev-list --author="$AUTHOR" --since="$SINCE_DATE" "$GIT_BRANCH"`
#else
# COMMIT_IDS=`git rev-list --since="$SINCE_DATE" "$GIT_BRANCH"`
#fi
if
[
-n "$AUTHOR"
]
; then
COMMIT_IDS=
`git rev-list --author="$AUTHOR" --before="$SINCE_DATE" "$GIT_BRANCH"`
else
COMMIT_IDS=
`git rev-list --before="$SINCE_DATE" "$GIT_BRANCH"`
fi
COMMIT_IDS_ARRAY=($COMMIT_IDS)
COMMIT_ID_NUM=${#COMMIT_IDS_ARRAY}
if
[
$COMMIT_ID_NUM -gt 0
]
; then
# OLD_COMMIT_ID=${COMMIT_IDS_ARRAY[i-1]}
OLD_COMMIT_ID=${COMMIT_IDS_ARRAY
[
0
]
}
else
OLD_COMMIT_ID=
fi
LATEST_COMMIT_ID=$(git rev-parse HEAD)
echo "
********************
* Old Commit ID is "$OLD_COMMIT_ID "*
********************
**
"
echo "
********************
* Latest Commit ID is "$LATEST_COMMIT_ID "*
********************
**
"
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
DATE=
`date +%Y-%m-%d`
ZIP_FILE="$GENERATE_FOLDER$DATE"'.zip'
#echo $LATEST_COMMIT_ID $OLD_COMMIT_ID
#
#################################################
#
# Start to execute command
#
if
[
-n "$OLD_COMMIT_ID"
]
; then
# delete files which not exists
FILES=
`git diff "$LATEST_COMMIT_ID" "$OLD_COMMIT_ID" --name-only`
FILE_ARRAY=($FILES)
j=0
for y in ${FILE_ARRAY
[
@
]
}
do
filepath="$SHELL_FOLDER/"$y
if
[
! -f "$filepath"
]
; then
unset FILE_ARRAY
[
j
]
fi
j=$
[
j+1
]
done
FILES_NUM=${#FILE_ARRAY}
if [ $FILES_NUM -gt 0 ]; then
# start to pack
git archive -o "$ZIP_FILE" HEAD ${FILE_ARRAY[@]} &&
echo "-----------------generate patch zip package complete, filename is $ZIP_FILE" &&
echo "************************ start to uncompress zip file *********************" &&
unzip "$ZIP_FILE" -d "$GENERATE_FOLDER" &&
echo "************************ uncompress zip file complete *********************" &&
echo "***************************************************************************" &&
echo "************************ start to compile project *************************" &&
# mvn clean install &&
echo "
************************
compile project complete
************************
*
" &&
echo "
************************************************************************
**
*
" &&
python archives.py "$ZIP_FILE" "$SHELL_FOLDER" &&
echo "
************************
generate patch file complete
********************
*
" &&
echo "
************************************************************************
**
*
"
else
echo "%%%%%%%%%%%%%%%%%%%%% No File to Patch,Do Nothing %%%%%%%%%%%%%%%%%%%%%%%%"
fi
else
echo "%%%%%%%%%%%%%%%%%%%%% No Commit Record Found,Do Nothing %%%%%%%%%%%%%%%%%%%%%%%%"
fi
#################################################
```
* archives.py
```
python
#!/usr/bin/python
#coding=utf-8
#weck
import zipfile
import pdb
import os
import time
import shutil
from sys import argv
py_cmd, zip_filepath, source_project_path = argv
def zip_dir(dirname, zipfilename):
filelist =
[]
if os.path.isfile(dirname):
filelist.append(dirname)
else :
for root, dirs, files in os.walk(dirname):
for name in files:
filelist.append(os.path.join(root, name))
zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
for tar in filelist:
arcname = tar[len(dirname):]
zf.write(tar, arcname)
zf.close()
'''
通过git生成的增量zip文件,获取编译后的文件并压缩
'''
def kbsZipFile(filename):
if zipfile.is_zipfile(filename):
rootdir = filename
[
0 : filename.rfind('/')+1
]
maxLen = len(rootdir)
ctx = rootdir
[
(rootdir.rfind('/', 0, (maxLen-1))+1):maxLen
]
target_dir = os.path.join(rootdir, ctx)
zf = zipfile.ZipFile(filename)
filepath_list = zf.namelist()
#遍历zip中的文件名,并且将文件 copy 到 target_dir 中
for filepath in filepath_list:
if os.path.isfile(os.path.join(rootdir, filepath)):
#遍历 class 文件
if filepath.startswith('core/src/main/java/'):
filename = filepath[filepath.rfind('/')+1:filepath.rfind('.java')]
my_dir = filepath[(len('core/src/main/java/')) : filepath.rfind('/')+1]
my_target_dir = os.path.join(target_dir, 'WEB-INF/classes/', my_dir)
project_dir = source_project_path
my_source_dir = os.path.join(project_dir, 'core/target/core/WEB-INF/classes/', my_dir)
# pdb.set_trace()
for my_filename in os.listdir(my_source_dir):
if os.path.isfile(os.path.join(my_source_dir, my_filename)) and (my_filename==filename + '.class' or my_filename.startswith(filename + '$')):
try:
os.makedirs(my_target_dir)
except OSError:
pass
shutil.copyfile(os.path.join(my_source_dir, my_filename), os.path.join(my_target_dir, my_filename))
#遍历 properties/xml 配置文件
elif filepath.startswith('core/src/main/resources/') and not filepath.endswith('.properties'):
my_dir = filepath[(len('core/src/main/resources/')) : filepath.rfind('/')+1]
my_filename = filepath[filepath.rfind('/')+1 : len(filepath)]
my_target_dir = os.path.join(target_dir, 'WEB-INF/classes/', my_dir)
my_source_dir = os.path.join(source_project_path, 'core/target/core/WEB-INF/classes/', my_dir)
try:
os.makedirs(my_target_dir)
except OSError:
pass
shutil.copyfile(os.path.join(my_source_dir, my_filename), os.path.join(my_target_dir, my_filename))
#遍历 webapp 下的文件
elif filepath.startswith('core/src/main/webapp/'):
my_dir = filepath[(len('core/src/main/webapp/')) : filepath.rfind('/')+1]
my_filename = filepath[filepath.rfind('/')+1 : len(filepath)]
my_target_dir = os.path.join(target_dir, my_dir)
my_source_dir = os.path.join(source_project_path, 'core/target/core/', my_dir)
try:
os.makedirs(my_target_dir)
except OSError:
pass
shutil.copyfile(os.path.join(my_source_dir, my_filename), os.path.join(my_target_dir, my_filename))
#增加增量包记录 META-INF 下加上时间戳
# update_dir_path = os.path.join(target_dir, 'META-INF');
# try:
# os.makedirs(update_dir_path)
# except OSError:
# pass
# update_file_path = os.path.join(update_dir_path, time.strftime('%Y%m%d%H%M', time.localtime()) + '.txt')
# with open(update_file_path, 'w') as update_file:
# update_file.write('update at ' + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
# update_file.write('\n')
#将 target_dir 压缩
zip_dir(target_dir, rootdir + 'patch-' + time.strftime('%Y%m%d%H%M', time.localtime()) + '.zip')
#删除临时生成的文件夹
shutil.rmtree(target_dir)
try:
os.remove(zip_filepath)
except:
print ("Error deleting temporary file, please delete it manually.")
finally:
if os.path.exists(os.path.join(rootdir,"core")):
shutil.rmtree(os.path.join(rootdir,"core"))
if os.path.exists(os.path.join(rootdir,"core-db")):
shutil.rmtree(os.path.join(rootdir,"core-db"))
if __name__=='__main__':
kbsZipFile(zip_filepath);
```
### 三、配置参数
打开gen_patch.sh文件,修改里面的四个参数配置:
```
shell
#生成差异包的目录,需要已经存在的目录(最好新建一个),windows的目录格式按照D:/test/patch/这种形式,目录需要以‘/’结尾
GENERATE_FOLDER=/Users/weck/Downloads/patch/
#分支
GIT_BRANCH=HLS-DEV
#时间
SINCE_DATE="2018-04-02 00:00:00"
#提交人
AUTHOR=gaoyang
```
### 四、运行脚本
Windows的童鞋请在项目目录下打开git-bash,MacOS的童鞋请打开终端并切换到项目目录,执行以下命令即可:
```
shell
$ sh gen_patch.sh
```
**注:在gen_patch.sh中有一个编译打包命令`mvn clean install`,如果已经更新到最新版本代码并且编译打包过了,可以把这个命令注释,不需要每次打包,加快速度.**
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment