#!/bin/sh set -e # 配置 DOCKER_PREFIX="algo-dev-internal.li-ai.com.cn:5000" DOCKER_PREFIX2="nas.fast-fun.cn:5000" # 获取项目名称 projectname=`cat projectname` dockerfile="" imagesuffix="" if [ "$2" == 'encrypt' ];then dockerfile="DockerfileEncrypt" imagesuffix="-encrypt" else dockerfile="Dockerfile" fi touch packaged.txt configfile_changed="0" # 读取 本次 changelist的每一行 # 第一次循环看是否存在配置文件的改变,如果存在,则全部镜像进行一次打包 while read line; do if [ "$configfile_changed" -eq "1" ];then # 如果没有配置文件发生改变,则看有没有算法发生改变 break fi if [ "`expr \"$line\" : \"RESOURCES/config-prd.ini*\"`" != "0" ] || [ "`expr \"$line\" : \"RESOURCES/config-test.ini*\"`" != "0" ] || [ "`expr \"$line\" : \"RESOURCES/config-algotest.ini*\"`" != "0" ];then # 如果配置文件有更改,则全部镜像都重新打包一遍 configfile_changed="1" echo "配置文件发生更改,将重新打包所有镜像" for i in `ls ALGOS/NONPERIODIC/`;do path="ALGOS/NONPERIODIC/"$i image=$i if (ls $path | grep $dockerfile > null);then image=$image$imagesuffix:1.0.${DRONE_BUILD_NUMBER} image=`echo "$image" | tr [:upper:] [:lower:]` echo $image "镜像打包中................" docker build -f ./$path/$dockerfile -t ${image} . imagetag=${DOCKER_PREFIX}/${projectname}/${image} docker tag ${image} $imagetag echo $path >> packaged.txt echo $image "镜像打包完成!" echo $imagetag "镜像上传中................" imagetag2=${DOCKER_PREFIX2}/${projectname}/${image} docker tag ${image} $imagetag2 echo $imagetag2 "镜像上传中................" docker push $imagetag echo $imagetag "镜像上传完成!" docker push $imagetag2 echo $imagetag2 "镜像上传完成!" fi done for i in `ls ALGOS/DATAANALYSE/`;do path="ALGOS/DATAANALYSE/"$i image=$i if (ls $path | grep $dockerfile > null);then image=$image$imagesuffix:1.0.${DRONE_BUILD_NUMBER} image=`echo "$image" | tr [:upper:] [:lower:]` echo $image "镜像打包中................" docker build -f ./$path/$dockerfile -t ${image} . imagetag=${DOCKER_PREFIX}/${projectname}/${image} docker tag ${image} $imagetag echo $path >> packaged.txt echo $image "镜像打包完成!" echo $imagetag "镜像上传中................" imagetag2=${DOCKER_PREFIX2}/${projectname}/${image} docker tag ${image} $imagetag2 echo $imagetag2 "镜像上传中................" docker push $imagetag echo $imagetag "镜像上传完成!" docker push $imagetag2 echo $imagetag2 "镜像上传完成!" fi done for i in `ls ALGOS/PERIODIC/`;do for ii in `ls ALGOS/PERIODIC/$i`;do path="ALGOS/PERIODIC/"$i/$ii image=$i"_"$ii if (ls $path | grep $dockerfile > null);then image=$image$imagesuffix:1.0.${DRONE_BUILD_NUMBER} image=`echo "$image" | tr [:upper:] [:lower:]` echo $image "镜像打包中................" docker build -f ./$path/$dockerfile -t ${image} . imagetag=${DOCKER_PREFIX}/${projectname}/${image} docker tag ${image} $imagetag echo $path >> packaged.txt echo $image "镜像打包完成!" echo $imagetag "镜像上传中................" imagetag2=${DOCKER_PREFIX2}/${projectname}/${image} docker tag ${image} $imagetag2 echo $imagetag2 "镜像上传中................" docker push $imagetag echo $imagetag "镜像上传完成!" docker push $imagetag2 echo $imagetag2 "镜像上传完成!" fi done done fi done < $1 if [ "$configfile_changed" -eq "0" ];then # 如果没有配置文件发生改变,则看有没有算法发生改变 echo "没有配置文件发生更改, 检查是否存在算法需要打包" while read line; do if [ "`expr \"$line\" : \"ALGOS/*\"`" != "0" ] ;then # 如果算法库有更改 OLD_IFS="$IFS" IFS="/" #修改分隔符 i=0 path="." for item in $line;do # 切分每一个单词 IFS="$OLD_IFS" i=`expr $i + 1` path=$path"/"$item if [ "$i" -eq "2" ];then type=$item # 判断是 NONPERIODIC 还是PERIODIC fi if [ "$i" -gt "2" ] && [ "`expr \"$type\" : \"PERIODIC$\"`" != "0" ] ;then if [ "$i" -gt "3" ];then break fi elif [ "$i" -gt "2" ] && [ "`expr \"$type\" : \"NONPERIODIC$\"`" != "0" ] ;then if [ "$i" -gt "2" ];then break fi elif [ "$i" -gt "2" ] && [ "`expr \"$type\" : \"DATAANALYSE$\"`" != "0" ] ;then if [ "$i" -gt "2" ];then break fi fi done IFS="$OLD_IFS" if ! (cat packaged.txt | grep "$path" > filt.txt);then # 如果文件为空,则进行打包 OLD_IFS="$IFS" IFS="/" #修改分隔符 i=0 for item in $path;do # 切分每一个单词 IFS="$OLD_IFS" i=`expr $i + 1` if [ "$i" -eq "4" ];then image=$item # fi if [ "$i" -eq "5" ];then image=$image"_"$item # fi done IFS="$OLD_IFS" if (ls $path | grep $dockerfile > null);then image=$image$imagesuffix:1.0.${DRONE_BUILD_NUMBER} image=`echo "$image" | tr [:upper:] [:lower:]` echo $image "镜像打包中................" docker build -f ./$path/$dockerfile -t ${image} . imagetag=${DOCKER_PREFIX}/${projectname}/${image} docker tag ${image} $imagetag echo $path >> packaged.txt echo $image "镜像打包完成!" echo $imagetag "镜像上传中................" imagetag2=${DOCKER_PREFIX2}/${projectname}/${image} docker tag ${image} $imagetag2 echo $imagetag2 "镜像上传中................" docker push $imagetag echo $imagetag "镜像上传完成!" docker push $imagetag2 echo $imagetag2 "镜像上传完成!" fi fi fi done < $1 fi