File tree Expand file tree Collapse file tree 6 files changed +3182
-0
lines changed Expand file tree Collapse file tree 6 files changed +3182
-0
lines changed Original file line number Diff line number Diff line change
1
+ ### 禅道钩子脚本(pre-receive)一些说明:
2
+
3
+
4
+
5
+ 总体分文三部分,
6
+
7
+ 1 . 变量定义部分
8
+
9
+ 2 . 校验部分:代码提交前的合规校验&代码扫描
10
+
11
+ 3 . 初始化入口
12
+
13
+
14
+
15
+ #### 172-225行是一些入口脚本
16
+
17
+ 首先176行根据参数值判断是否为命令行模式。如果真则直接进行代码扫描和合规性校验。
18
+
19
+ 188-204行是判断如果分支名以判断分支名称如果是“test"、"TEST"、"RELEASE* "、"release"* 则不做处理。直接跳过。
20
+
21
+ 205-207行调用自己写的微服务进行一些分支检测的逻辑。这块可以自己实现,主要是结合自己的业务逻辑去做一些校验。
22
+
23
+
24
+
25
+ #### 4-111行是validate_ref() 代码提交前的合规校验的一些逻辑
26
+
27
+ 首先获取当前所有的提交注释,获取一些提交用户信息(作者和提交人信息)
28
+
29
+ 32行判断是不是合并操作,如果是则退出循环校验。
30
+
31
+ 如39行所示,将提交人信息,分支名称,提交信息。项目等信息发送到微服务中做校验。比如这里可以进行检测提交人是否是公司账号,防止有不合法账号提交信息。
32
+
33
+ 55-63行根据提交信息,查找出本次提交的有关的".sql"结尾的sql文件,和以一些“properties”或者“.yml”等结尾的配置文件。
34
+
35
+ 64-77
36
+
37
+ 遍历本次所有提交的sql文件。获取文件内容,文件名称等信息。然后在72行将sql文件的发送到后台进行一些校验和钩子处理(比如此处可以进行一些sql语法检测及优化等一些操作)
38
+
39
+ 46-95行
40
+
41
+ 当前部分是对配置文件的一些自动发布到配置中心等一些hook处理。获取文件的内容,分支名,用户名等信息发送到后台微服务做一些校验或者后置处理。如果不合规则返回结果,中断执行。
42
+
43
+ 98-110行是对提交信息如果为merge* 的一些处理,这里使用标识,分别以不同标识去执行部署或者执行ci流水线代码质量扫描一些信息
44
+
45
+
46
+
47
+ #### 112-168行是代码扫描的一些逻辑
48
+
49
+ 定义一些java_home等变量信息,因为后面执行阿里的p3c代码扫描会使用到。判断如果是初次提交则跳过校验。
50
+
51
+ 136-166行判断如果不是MR操作,则查找出所有变化的".java"文件,将使用阿里的p3c工具进行扫描。
52
+
53
+ 155行是调用后台微服务,对扫描结果进行合规性校验。如果不合规则中断执行,且输出扫描数据。
54
+
55
+
56
+
57
+ #### 注意:
58
+
59
+ 使用到的p3c-pmd-2.1.1-jar-with-dependencies.jar 可以[ github地址] ( https://github.com/pmd/pmd ) 中下载。
60
+
61
+ 一些curl调用,需要自己实现逻辑。样例已做脱敏处理,这里具体不做展示,根据实际需求可以做扩展。
62
+
63
+
64
+
65
+ #### 参考:
66
+
67
+ GitLab 钩子使用说明:https://docs.gitlab.com/ee/user/project/repository/mirror/bidirectional.html#prevent-conflicts-by-using-a-pre-receive-hook
68
+
69
+ 阿里p3c扫描工具:https://github.com/alibaba/p3c
70
+
71
+ PMD - 源代码分析器: https://github.com/pmd/pmd
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
Original file line number Diff line number Diff line change
1
+ <project xmlns =" http://maven.apache.org/POM/4.0.0" xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance" xsi : schemaLocation =" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
2
+ <modelVersion >4.0.0</modelVersion >
3
+ <parent >
4
+ <groupId >com.eazybuilder</groupId >
5
+ <artifactId >gitlab</artifactId >
6
+ <version >1.0.0</version >
7
+ </parent >
8
+ <artifactId >gitlab</artifactId >
9
+ <packaging >pom</packaging >
10
+ <properties >
11
+ <skip .docker.build>false</skip .docker.build>
12
+ </properties >
13
+ </project >
Original file line number Diff line number Diff line change
1
+ FROM gitlab/gitlab-ce:latest
2
+
3
+ ADD hooks/* /opt/gitlab/embedded/service/gitlab-shell/hooks
4
+ ADD gitlab.rb /etc/gitlab/
5
+ RUN chmod -R 777 /opt/gitlab/embedded/service/gitlab-shell/hooks/
6
+ RUN chmod -R 777 /etc/gitlab/
7
+
8
+ RUN mkdir /usr/local/java
9
+ # jdk可以前往 https://www.oracle.com/java/technologies/downloads/ 下载
10
+ # 和copy一样,复制文件到指定目录,但是copy不能解压,add自动解压
11
+ ADD jdk-8u181-linux-x64.tar.gz /usr/local/java
12
+ # 重命名(不知道文件名可以现在宿主机解压后看一下)
13
+ RUN ln -s /usr/local/java/jdk1.8.0_181 /usr/local/java/jdk
14
+ # 设置环境变量
15
+ ENV JAVA_HOME /usr/local/java/jdk
16
+ ENV JRE_HOME ${JAVA_HOME}/jre
17
+ ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
18
+ ENV PATH ${JAVA_HOME}/bin:$PATH
You can’t perform that action at this time.
0 commit comments