73.docker-image-build-push.sh 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. set -e
  2. #---------------------------------------------------------------------
  3. #(x.1)参数
  4. args_="
  5. export basePath=/root/temp/svn
  6. export version=`grep '<Version>' $(grep '<pack>\|<publish>' ${basePath} -r --include *.csproj -l | head -n 1) | grep -oP '>(.*)<' | tr -d '<>'`
  7. export DOCKER_SERVER=
  8. export DOCKER_USERNAME=serset
  9. export DOCKER_PASSWORD=xxx
  10. # "
  11. #---------------------------------------------------------------------
  12. echo "(x.2)docker - init buildx"
  13. export builderName="mybuilder-$version"
  14. echo "builderName: $builderName"
  15. echo "开启实验特性"
  16. export DOCKER_CLI_EXPERIMENTAL=enabled
  17. echo "验证是否开启"
  18. docker buildx version
  19. echo "启用binfmt_misc"
  20. docker run --rm --privileged docker/binfmt:66f9012c56a8316f9244ffd7622d7c21c1f6f28d
  21. echo "验证binfmt_misc是否开启"
  22. ls -al /proc/sys/fs/binfmt_misc/
  23. echo "创建构建器"
  24. if [ ! "$(docker buildx ls | grep $builderName)" ]; then docker buildx create --use --name $builderName --buildkitd-flags '--allow-insecure-entitlement security.insecure'; fi
  25. echo "启动构建器"
  26. docker buildx inspect $builderName --bootstrap
  27. echo "查看当前使用的构建器及构建器支持的CPU架构"
  28. docker buildx ls
  29. #---------------------------------------------------------------------
  30. echo "(x.3)docker - build and push"
  31. # login if UserName is not empty
  32. if [ -n "$DOCKER_USERNAME" ]; then docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD; fi
  33. dockerPath=$basePath/Publish/release/release/docker-image
  34. for dockerName in `ls $dockerPath`
  35. do
  36. if [ -d $dockerPath/$dockerName ]
  37. then
  38. platform="linux/amd64,linux/arm64,linux/arm/v7"
  39. if [ -f "$dockerPath/$dockerName/Dockerfile.platform" ]; then platform=`cat "$dockerPath/$dockerName/Dockerfile.platform"`; fi
  40. echo "docker build $dockerName, platform: $platform"
  41. docker buildx build $dockerPath/$dockerName -t $DOCKER_SERVER/$dockerName:$version -t $DOCKER_SERVER/$dockerName --platform=$platform --push --output=type=registry,registry.insecure=true --builder $builderName
  42. fi
  43. done
  44. #---------------------------------------------------------------------
  45. echo "(x.4)docker - remove buildx"
  46. if [ "$(docker buildx ls | grep $builderName)" ]; then docker buildx rm $builderName; fi