This repository has been archived by the owner on Mar 22, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 15
/
.gitlab-ci.yml
173 lines (168 loc) · 9.09 KB
/
.gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# 此流水线为 gitlab.com、jihulab.com、自建 gitlab 使用
stages:
# 极狐GitLab 构建/测试/扫描依赖漏洞等
- package
# 使用 k8s(也可使用 docker、shell 等执行器,需要能使用 docker 相关命令)构建、制作 docker 镜像、推送到 docker 私服
- k8s-package
# 在 k8s 所在的服务器上执行项目滚动发布
- k8s-publish
# 使用 shell 执行器构建
- shell-package
# 使用 shell 执行器发布
- shell-service
# 使用 docker 执行器构建、制作 docker 镜像
- docker-package
# 使用 docker 执行器发布
- docker-service
# 代码同步
- sync
# murphysec
murphysec:
variables:
MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
stage: package
# Docker 镜像开源地址:https://gitee.com/xuxiaowei-com-cn/murphysec
image: xuxiaoweicomcn/murphysec:v3.1.1-maven-3.6.3-openjdk-17
script:
# murphysec 文档:https://www.murphysec.com/docs/guides/scan-scene/cli.html
- murphysec -v
- murphysec auth login $murphysec_token
- murphysec scan . --log-level info --write-log-to murphysec.log --json
# https://docs.gitlab.cn/jh/ci/yaml/index.html#cache
cache:
key: "${CI_JOB_NAME}"
paths:
- .m2/repository
artifacts:
name: murphysec
paths:
- murphysec.log
# https://docs.gitlab.com/ee/ci/yaml/index.html#rules
# 极狐GitLab中文文档:https://docs.gitlab.cn/jh/ci/yaml/index.html#rules
rules:
# PR 到 main 分支时预执行
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"
# PR 合并到 main 后执行、推送到 main 分支时
- if: $CI_COMMIT_BRANCH == "main"
allow_failure: true
#
# coverage
coverage:
variables:
MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
stage: package
image: maven:3.6.3-openjdk-17
services:
- name: docker:24.0.6-dind
variables:
# 关闭 TLS
DOCKER_TLS_CERTDIR: ""
script:
- git --version
- echo 常量网址:https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
- echo 常量网址(极狐GitLab中文文档):https://docs.gitlab.cn/jh/ci/variables/predefined_variables.html
- echo 当前分支:$CI_COMMIT_BRANCH
- echo 分支上存在的上一个最新提交:$CI_COMMIT_BEFORE_SHA
- echo 分支上存在的上一个最新提交前八个字符:$CI_COMMIT_SHORT_SHA
- echo ISO8601格式的提交时间戳:$CI_COMMIT_TIMESTAMP
- echo "Name<email>格式提交的作者:$CI_COMMIT_AUTHOR"
- echo 提交标记名称。仅在标签的管道中可用:$CI_COMMIT_TAG
- echo 主分支:$CI_DEFAULT_BRANCH
- echo 项目路径:$CI_PROJECT_DIR
- echo 单个执行器中构建执行的唯一ID:$CI_CONCURRENT_ID
- echo 单个执行器和项目中构建执行的唯一ID:$CI_CONCURRENT_PROJECT_ID
- echo 作业是否手动启动:$CI_JOB_MANUAL
- echo 作业的名称:$CI_JOB_NAME
- echo 作业阶段的名称:$CI_JOB_STAGE
- echo 作业开始时的UTC日期时间,采用ISO8601格式:$CI_JOB_STARTED_AT
- echo 创建管道时的UTC日期时间,采用ISO8601格式:$CI_PIPELINE_CREATED_AT
- echo 当前项目的ID,此ID在GitLab实例上的所有项目中都是唯一的:$CI_PROJECT_ID
- echo 作业的项目命名空间(用户名或组名):$CI_PROJECT_NAMESPACE
- echo 项目目录的名称:$CI_PROJECT_NAME
- echo 包含项目名称的项目命名空间:$CI_PROJECT_PATH
- echo GitLab实例的主要版本:$CI_SERVER_VERSION_MAJOR
- echo GitLab实例的次要版本:$CI_SERVER_VERSION_MINOR
- echo GitLab实例的补丁版本:$CI_SERVER_VERSION_PATCH
- echo GitLab实例的完整版本:$CI_SERVER_VERSION
- echo 开始作业的用户的电子邮件:$GITLAB_USER_EMAIL
- echo 启动作业的用户的ID:$GITLAB_USER_ID
- echo 启动作业的用户的用户名:$GITLAB_USER_LOGIN
- echo 启动作业的用户的名称:$GITLAB_USER_NAME
- echo 合并请求的实例级ID,这是GitLab上所有项目的唯一ID:$CI_MERGE_REQUEST_ID
- echo 合并请求的项目级IID(内部ID),此ID对于当前项目是唯一的:$CI_MERGE_REQUEST_IID
- echo 合并请求的目标分支名称:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
- echo 作业详细信息URL:$CI_JOB_URL
- echo 作业的内部ID,在GitLab实例中的所有作业中是唯一的:$CI_JOB_ID
- echo 正在使用的Runner的唯一ID:$CI_RUNNER_ID
- echo 运行作业的GitLabRunner的版本:$CI_RUNNER_VERSION
- echo 管道详细信息的URL:$CI_PIPELINE_URL
- echo 当前管道的实例级ID。此ID在GitLab实例上的所有项目中都是唯一的:$CI_PIPELINE_ID
- echo 当前管道的项目级IID(内部ID),此ID仅在当前项目中是唯一的:$CI_PIPELINE_IID
- echo GitLab实例URL的主机,没有协议或端口:$CI_SERVER_HOST
- echo 项目的HTTP(S)地址:$CI_PROJECT_URL
- echo 克隆Git存储库的URL:$CI_REPOSITORY_URL
- echo $DOCKER_PORT
- echo $DOCKER_PORT_2375_TCP
- echo $DOCKER_PORT_2375_TCP_PROTO
- echo $DOCKER_PORT_2375_TCP_PORT
- echo $DOCKER_PORT_2375_TCP_ADDR
- echo $DOCKER_PORT_2376_TCP
- echo $DOCKER_PORT_2376_TCP_PROTO
- echo $DOCKER_PORT_2376_TCP_PORT
- echo $DOCKER_PORT_2376_TCP_ADDR
# 自建 GitLab 实例 URL 的主机(部分域名)
- PRIVATE_SERVER_HOST=xuxiaowei
- if [[ $CI_SERVER_HOST =~ $PRIVATE_SERVER_HOST ]];
then
# 自建 GitLab 使用 Maven 私库(文档:https://gitlab-k8s.xuxiaowei.com.cn/gitlab-k8s/docs/nexus/docker-install-nexus)
- SETTINGS_FILE_NAME=settings-private.xml;
else
# 非自建 GitLab 使用 阿里/腾讯 Maven 镜像
- SETTINGS_FILE_NAME=settings.xml;
fi
- mvn clean -e -U package source:jar javadoc:jar install -DskipTests=true -s $SETTINGS_FILE_NAME && PACKAGE_FLAG=1;
- if [ "$PACKAGE_FLAG" == "1" ]; then echo '打包完成'; else echo '打包失败' && xxxx; fi
- mvn -pl admin-server -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl gateway -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl passport -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl resource-services-parent/canal -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl resource-services-parent/file -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl resource-services-parent/master-data -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl resource-services-parent/user -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl resource-services-parent/webservice -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl resource-services-parent/websocket -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl resource-services-parent/wechat-miniprogram -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl resource-services-parent/wechat-offiaccount -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl ui -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- mvn -pl xxl-job-admin -s $SETTINGS_FILE_NAME docker:build -Ddocker.host=$DOCKER_PORT -DCI_PIPELINE_ID=$CI_PIPELINE_ID;
- rm -rf .m2/repository/cloud/xuxiaowei
cache:
key: "${CI_JOB_NAME}"
paths:
- .m2/repository
- passport-ui/node/
- passport-ui/node_modules/
- ui/node/
- ui/node_modules/
# https://docs.gitlab.com/ee/ci/yaml/index.html#rules
# 极狐GitLab中文文档:https://docs.gitlab.cn/jh/ci/yaml/index.html#rules
rules:
# PR 到 main 分支时预执行
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"
# PR 合并到 main 后执行、推送到 main 分支时
- if: $CI_COMMIT_BRANCH == "main"
# 嵌入
include:
# 对象储存
# 已禁用,有需要时才开放此内容
# - /upload.yml
# 使用 k8s 执行器 打包、部署服务
- /k8s.yml
# 使用 shell 执行器 打包、部署服务
- /shell.yml
# 使用 docker 执行器 打包、部署服务
- /docker.yml
# 同步代码
- /sync.yml