package_sh.sh 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #!/bin/sh
  2. set -e
  3. # 配置
  4. DOCKER_PREFIX="algo-dev-internal.li-ai.com.cn:5000"
  5. DOCKER_PREFIX2="nas.fast-fun.cn:5000"
  6. # 获取项目名称
  7. projectname=`cat projectname`
  8. dockerfile=""
  9. imagesuffix=""
  10. if [ "$2" == 'encrypt' ];then
  11. dockerfile="DockerfileEncrypt"
  12. imagesuffix="-encrypt"
  13. else
  14. dockerfile="Dockerfile"
  15. fi
  16. touch packaged.txt
  17. configfile_changed="0"
  18. # 读取 本次 changelist的每一行
  19. # 第一次循环看是否存在配置文件的改变,如果存在,则全部镜像进行一次打包
  20. while read line;
  21. do
  22. if [ "$configfile_changed" -eq "1" ];then # 如果没有配置文件发生改变,则看有没有算法发生改变
  23. break
  24. fi
  25. if [ "`expr \"$line\" : \"RESOURCES/config-prd.ini*\"`" != "0" ] ||
  26. [ "`expr \"$line\" : \"RESOURCES/config-test.ini*\"`" != "0" ] ||
  27. [ "`expr \"$line\" : \"RESOURCES/config-algotest.ini*\"`" != "0" ];then # 如果配置文件有更改,则全部镜像都重新打包一遍
  28. configfile_changed="1"
  29. echo "配置文件发生更改,将重新打包所有镜像"
  30. for i in `ls ALGOS/NONPERIODIC/`;do
  31. path="ALGOS/NONPERIODIC/"$i
  32. image=$i
  33. if (ls $path | grep $dockerfile > null);then
  34. image=$image$imagesuffix:1.0.${DRONE_BUILD_NUMBER}
  35. image=`echo "$image" | tr [:upper:] [:lower:]`
  36. echo $image "镜像打包中................"
  37. docker build -f ./$path/$dockerfile -t ${image} .
  38. imagetag=${DOCKER_PREFIX}/${projectname}/${image}
  39. docker tag ${image} $imagetag
  40. echo $path >> packaged.txt
  41. echo $image "镜像打包完成!"
  42. echo $imagetag "镜像上传中................"
  43. imagetag2=${DOCKER_PREFIX2}/${projectname}/${image}
  44. docker tag ${image} $imagetag2
  45. echo $imagetag2 "镜像上传中................"
  46. docker push $imagetag
  47. echo $imagetag "镜像上传完成!"
  48. docker push $imagetag2
  49. echo $imagetag2 "镜像上传完成!"
  50. fi
  51. done
  52. for i in `ls ALGOS/DATAANALYSE/`;do
  53. path="ALGOS/DATAANALYSE/"$i
  54. image=$i
  55. if (ls $path | grep $dockerfile > null);then
  56. image=$image$imagesuffix:1.0.${DRONE_BUILD_NUMBER}
  57. image=`echo "$image" | tr [:upper:] [:lower:]`
  58. echo $image "镜像打包中................"
  59. docker build -f ./$path/$dockerfile -t ${image} .
  60. imagetag=${DOCKER_PREFIX}/${projectname}/${image}
  61. docker tag ${image} $imagetag
  62. echo $path >> packaged.txt
  63. echo $image "镜像打包完成!"
  64. echo $imagetag "镜像上传中................"
  65. imagetag2=${DOCKER_PREFIX2}/${projectname}/${image}
  66. docker tag ${image} $imagetag2
  67. echo $imagetag2 "镜像上传中................"
  68. docker push $imagetag
  69. echo $imagetag "镜像上传完成!"
  70. docker push $imagetag2
  71. echo $imagetag2 "镜像上传完成!"
  72. fi
  73. done
  74. for i in `ls ALGOS/PERIODIC/`;do
  75. for ii in `ls ALGOS/PERIODIC/$i`;do
  76. path="ALGOS/PERIODIC/"$i/$ii
  77. image=$i"_"$ii
  78. if (ls $path | grep $dockerfile > null);then
  79. image=$image$imagesuffix:1.0.${DRONE_BUILD_NUMBER}
  80. image=`echo "$image" | tr [:upper:] [:lower:]`
  81. echo $image "镜像打包中................"
  82. docker build -f ./$path/$dockerfile -t ${image} .
  83. imagetag=${DOCKER_PREFIX}/${projectname}/${image}
  84. docker tag ${image} $imagetag
  85. echo $path >> packaged.txt
  86. echo $image "镜像打包完成!"
  87. echo $imagetag "镜像上传中................"
  88. imagetag2=${DOCKER_PREFIX2}/${projectname}/${image}
  89. docker tag ${image} $imagetag2
  90. echo $imagetag2 "镜像上传中................"
  91. docker push $imagetag
  92. echo $imagetag "镜像上传完成!"
  93. docker push $imagetag2
  94. echo $imagetag2 "镜像上传完成!"
  95. fi
  96. done
  97. done
  98. fi
  99. done < $1
  100. if [ "$configfile_changed" -eq "0" ];then # 如果没有配置文件发生改变,则看有没有算法发生改变
  101. echo "没有配置文件发生更改, 检查是否存在算法需要打包"
  102. while read line;
  103. do
  104. if [ "`expr \"$line\" : \"ALGOS/*\"`" != "0" ] ;then # 如果算法库有更改
  105. OLD_IFS="$IFS"
  106. IFS="/" #修改分隔符
  107. i=0
  108. path="."
  109. for item in $line;do # 切分每一个单词
  110. IFS="$OLD_IFS"
  111. i=`expr $i + 1`
  112. path=$path"/"$item
  113. if [ "$i" -eq "2" ];then
  114. type=$item # 判断是 NONPERIODIC 还是PERIODIC
  115. fi
  116. if [ "$i" -gt "2" ] && [ "`expr \"$type\" : \"PERIODIC$\"`" != "0" ] ;then
  117. if [ "$i" -gt "3" ];then
  118. break
  119. fi
  120. elif [ "$i" -gt "2" ] && [ "`expr \"$type\" : \"NONPERIODIC$\"`" != "0" ] ;then
  121. if [ "$i" -gt "2" ];then
  122. break
  123. fi
  124. elif [ "$i" -gt "2" ] && [ "`expr \"$type\" : \"DATAANALYSE$\"`" != "0" ] ;then
  125. if [ "$i" -gt "2" ];then
  126. break
  127. fi
  128. fi
  129. done
  130. IFS="$OLD_IFS"
  131. if ! (cat packaged.txt | grep "$path" > filt.txt);then # 如果文件为空,则进行打包
  132. OLD_IFS="$IFS"
  133. IFS="/" #修改分隔符
  134. i=0
  135. for item in $path;do # 切分每一个单词
  136. IFS="$OLD_IFS"
  137. i=`expr $i + 1`
  138. if [ "$i" -eq "4" ];then
  139. image=$item #
  140. fi
  141. if [ "$i" -eq "5" ];then
  142. image=$image"_"$item #
  143. fi
  144. done
  145. IFS="$OLD_IFS"
  146. if (ls $path | grep $dockerfile > null);then
  147. image=$image$imagesuffix:1.0.${DRONE_BUILD_NUMBER}
  148. image=`echo "$image" | tr [:upper:] [:lower:]`
  149. echo $image "镜像打包中................"
  150. docker build -f ./$path/$dockerfile -t ${image} .
  151. imagetag=${DOCKER_PREFIX}/${projectname}/${image}
  152. docker tag ${image} $imagetag
  153. echo $path >> packaged.txt
  154. echo $image "镜像打包完成!"
  155. echo $imagetag "镜像上传中................"
  156. imagetag2=${DOCKER_PREFIX2}/${projectname}/${image}
  157. docker tag ${image} $imagetag2
  158. echo $imagetag2 "镜像上传中................"
  159. docker push $imagetag
  160. echo $imagetag "镜像上传完成!"
  161. docker push $imagetag2
  162. echo $imagetag2 "镜像上传完成!"
  163. fi
  164. fi
  165. fi
  166. done < $1
  167. fi