BlueXIII's Blog

热爱技术,持续学习

0%

Jenkins大仓库精准构建

说明

  • 针对老项目,多个模块共用一个git仓库的情况,识别出每次push的变更,只构建对应的模块
  • 如果配置多个git地址相同的Jenkins流水线,他们的hook地址也是相同的,无法单独触发其中一个流水线。所以要配置多个镜像仓库。
  • 使用原始方式配置最便捷,不使用gitlab、gogs
  • 当使用ssh协议对外暴露git时,由于jenkins的bug?,可以手工构建但无法通过hook触发。所以必须再配置httpd服务通过http对外暴露。

git镜像仓库配置

参考文档

https://blog.csdn.net/mxdzchallpp/article/details/80597126

  • 使用http协议对外暴露,搭建方式不再赘述
  • 为一个仓库配置多个镜像时,可以用ln -s软链接方式实现

Jenkins流水线配置

为每个模块配置独立的流水线,使用独立的仓库

自动构建测试:

1
curl http://10.133.0.186/devops_webhook/git/?url=http://10.193.2.12:8081/git/develop-alert

Git镜像库同步脚本

使用后台进程while do循环方式,每10秒pull一次

sync.sh

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
#!/bin/sh

GIT_PATH=/dubhe/git/develop
BASE_PATH=/dubhe/git/sync-dev
SLEEP_SEC=10

while :
do
echo Git同步开始 `date +"%Y/%m/%d %H:%M:%S"` | tee -a sync.log

# 拉取git仓库更新日志到sync.dat
cd $GIT_PATH
oldsha=`git rev-parse HEAD`
git pull
git diff --name-only $oldsha | tee -a "$BASE_PATH/sync.dat" "$BASE_PATH/sync.log"

# 判断发生变更的模块并发送通知到Jenkins
cd $BASE_PATH
cat sync.cfg|while read line
do
module=`echo $line|awk -F ' ' '{print $1}'`
hook=`echo $line|awk -F ' ' '{print $2}'`
count=`cat sync.dat | grep "$module"|wc -l`
#echo $module $hook $count

if test $count -gt 0
then
echo 触发构建 $module 模块 | tee -a sync.log
curl -s $hook >/dev/null
fi
done

echo Git同步完成 `date +"%Y/%m/%d %H:%M:%S"` | tee -a sync.log

# 清空dat文件
> sync.dat
echo "" | tee -a sync.log

# 休眠
sleep $SLEEP_SEC
done

sync.cfg

1
2
3
4
5
6
7
8
9
efpx-ui    http://10.133.0.186/devops_webhook/git/?url=http://10.193.2.12:8081/git/develop-ui
efpx-upms http://10.133.0.186/devops_webhook/git/?url=http://10.193.2.12:8081/git/develop-upms
dubhe-metadata http://10.133.0.186/devops_webhook/git/?url=http://10.193.2.12:8081/git/develop-metadata
dubhe-scheduler http://10.133.0.186/devops_webhook/git/?url=http://10.193.2.12:8081/git/develop-scheduler
dubhe-data-integration http://10.133.0.186/devops_webhook/git/?url=http://10.193.2.12:8081/git/develop-data-integration
dubhe-alert http://10.133.0.186/devops_webhook/git/?url=http://10.193.2.12:8081/git/develop-alert
dubhe-api-generation http://10.133.0.186/devops_webhook/git/?url=http://10.193.2.12:8081/git/develop-api-generation
dubhe-quality http://10.133.0.186/devops_webhook/git/?url=http://10.193.2.12:8081/git/develop-quality

监听钩子(已废弃)

使用nc搭建简易HTTP服务器
因gitlat至镜像服务器的网络不可达,此方案废弃

listen.sh

1
2
3
4
5
6
while true
do
cat index.http | nc -l 8082
# echo "开始同步git"
# call sync shell
done

index.http

1
2
3
4
5
6
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!

<!doctype html>
<html><body><h1>开始同步GIT</h1></body></html>

测试

1
2
curl http://10.193.2.12:8082
curl http://10.193.2.12:8083