Skip to content

Commit 7a4731a

Browse files
Merge pull request #37 from 172184221/master
gitlab的hook文件提交和dockerfile提交
2 parents 7d58f2f + 35592a2 commit 7a4731a

File tree

6 files changed

+3182
-0
lines changed

6 files changed

+3182
-0
lines changed

thridparty/gitlab/README.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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+

thridparty/gitlab/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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

0 commit comments

Comments
 (0)