docker-deploy.sh 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/usr/bin/env bash
  2. # Build and push Docker image from project source.
  3. #
  4. # Usage:
  5. # ./scripts/docker-deploy.sh
  6. #
  7. # Custom build directory / registry / tag:
  8. # BUILD_DIR=/your/build/path \
  9. # IMAGE_REGISTRY=registry-vpc.cn-hangzhou.aliyuncs.com/stuuudy/external_demand \
  10. # BUILD_TIMESTAMP=20260717143000 \
  11. # ./scripts/docker-deploy.sh
  12. #
  13. # Environment variables:
  14. # BUILD_DIR Source directory containing Dockerfile (default: repo root)
  15. # IMAGE_REGISTRY Docker image repository
  16. # BUILD_TIMESTAMP Image tag (default: YYYYMMDDHHMMSS)
  17. # PUSH Push after build (default: true)
  18. set -euo pipefail
  19. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  20. PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
  21. BUILD_DIR="${BUILD_DIR:-$PROJECT_ROOT}"
  22. IMAGE_REGISTRY="${IMAGE_REGISTRY:-registry-vpc.cn-hangzhou.aliyuncs.com/stuuudy/external_demand}"
  23. BUILD_TIMESTAMP="${BUILD_TIMESTAMP:-$(date +%Y%m%d%H%M%S)}"
  24. PUSH="${PUSH:-true}"
  25. IMAGE_TAG="${IMAGE_REGISTRY}:${BUILD_TIMESTAMP}"
  26. LATEST_TAG="${IMAGE_REGISTRY}:latest"
  27. usage() {
  28. cat <<EOF
  29. Usage: $(basename "$0") [options]
  30. Options:
  31. --no-push Build only, do not push to registry
  32. -h, --help Show this help
  33. Environment:
  34. BUILD_DIR ${BUILD_DIR}
  35. IMAGE_REGISTRY ${IMAGE_REGISTRY}
  36. BUILD_TIMESTAMP ${BUILD_TIMESTAMP}
  37. EOF
  38. }
  39. while [[ $# -gt 0 ]]; do
  40. case "$1" in
  41. --no-push)
  42. PUSH=false
  43. shift
  44. ;;
  45. -h|--help)
  46. usage
  47. exit 0
  48. ;;
  49. *)
  50. echo "Unknown option: $1" >&2
  51. usage
  52. exit 1
  53. ;;
  54. esac
  55. done
  56. echo "==> Building from: ${BUILD_DIR}"
  57. echo "==> Image tag: ${IMAGE_TAG}"
  58. cd "$BUILD_DIR"
  59. docker build -t "$IMAGE_TAG" -t "$LATEST_TAG" .
  60. if [[ "$PUSH" == "true" ]]; then
  61. echo "==> Pushing: ${IMAGE_TAG}"
  62. docker push "$IMAGE_TAG"
  63. docker push "$LATEST_TAG"
  64. else
  65. echo "==> Skipping push"
  66. fi
  67. echo "==> Done"
  68. echo " ${IMAGE_TAG}"
  69. echo " ${LATEST_TAG}"