Technical note
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流水线配置
为每个模块配置独立的流水线,使用独立的仓库
自动构建测试:
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
#!/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
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
while true
do
cat index.http | nc -l 8082
# echo "开始同步git"
# call sync shell
done
index.http
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!
<!doctype html>
<html><body><h1>开始同步GIT</h1></body></html>
测试
curl http://10.193.2.12:8082
curl http://10.193.2.12:8083