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