GitLab CI/CD 打包变更微服务模块

在使用gitlab ci/cd部署我们服务时,是怎么知道对应模块文件的变更的呢?是如何对变成的微服务模块进行打包的呢?下面将从git命令、shell 命令、mvn 命令等三个主要的命令讲解其具体实现。 

git命令获取变更记录

通过下面命令就能获取到变更文件:

git diff --name-status git提交本次版本号 git提交上次版本号

gitlab版本号获取可以通过下面两个变量获取:

$CI_COMMIT_SHA
$CI_COMMIT_BEFORE_SHA

 通过上面两个信息就能提取到变更文件的目录信息:

下面就是通过shell命令获取变更模块,然后打包对应模块和其依赖的模块了。

shell解析变更模块

然后就是通过shell脚本解析上面git命令获取得到的变文件目录,如下:

file_changes=$(git diff --name-status  f246b466 6f3a6285)
declare -a UNIQUE_FOLDERS
while read -r line; do

    root_folder=`echo "$line" | cut -b 3-  |  cut -d "/" -f1`

    if [ -d "$k8s_folder" ]; then
        UNIQUE_FOLDERS[i]="${root_folder}"
    fi
done <<< "$file_changes"
UNIQUE_FOLDERS=($(printf "%s\n" "${UNIQUE_FOLDERS[@]}" | sort -u))

通过上面脚本可以获取唯一且变更了文件的根目录:

report

ticket

vehicle

mvn 命令

mvn命令打包指定模块,该命令将模块依赖的common module和父 pom一起打包,所以不用担心依赖不会重新打包的问题

    mvn package -pl module -am -Dmaven.test.skip=true

流程

  • 通过shell脚本循环变更的目录,mvn打包模块和其依赖。
  • 将生成的jar包,k8s部署文件,dockerfile文件拷贝到新的artifact目录下。gitlab后面的build和deploy job,将会操作artifact目录下的文件,然后进行镜像上传、k8s部署。
     
for changed_folder in "${UNIQUE_FOLDERS[@]}"
do
    mvn package -pl ${changed_folder} -am -Dmaven.test.skip=true
    subfolder=$(echo "${changed_folder}" | cut -d'-' -f2-)
    mkdir -p ./artifact/${subfolder}
    cp ./${changed_folder}/target/*.jar ./artifact/${subfolder}/runnable.jar
    cp ./${changed_folder}/k8s/deployment.yaml ./artifact/${subfolder}/
    cp ./${changed_folder}/k8s/Dockerfile ./artifact/${subfolder}/
done

整个完整的脚本如下:

#!/bin/bash


file_changes=$(git diff --name-status  ${CI_COMMIT_SHA} ${CI_COMMIT_BEFORE_SHA})
declare -a UNIQUE_FOLDERS
while read -r line; do
    root_folder=`echo "$line" | cut -b 3-  |  cut -d "/" -f1`
    if [ -d "$k8s_folder" ]; then
        UNIQUE_FOLDERS[i]="${root_folder}"
    fi
done <<< "$file_changes"

UNIQUE_FOLDERS=($(printf "%s\n" "${UNIQUE_FOLDERS[@]}" | sort -u))
for changed_folder in "${UNIQUE_FOLDERS[@]}"
do
    mvn package -pl ${changed_folder} -am -Dmaven.test.skip=true
    subfolder=$(echo "${changed_folder}" | cut -d'-' -f2-)
    mkdir -p ./artifact/${subfolder}
    cp ./${changed_folder}/target/*.jar ./artifact/${subfolder}/runnable.jar
    cp ./${changed_folder}/k8s/deployment.yaml ./artifact/${subfolder}/
    cp ./${changed_folder}/k8s/Dockerfile ./artifact/${subfolder}/
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知始行末

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值