docker-deploy.sh 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. echo "==> Verifying video truncate runtime in image"
  61. docker run --rm --entrypoint python "$IMAGE_TAG" scripts/verify_video_truncate_runtime.py
  62. echo "==> Verifying pipeline imports and migration head"
  63. docker run --rm --entrypoint python "$IMAGE_TAG" -m compileall -q supply_infra api alembic
  64. docker run --rm --entrypoint alembic "$IMAGE_TAG" heads
  65. if [[ "$PUSH" == "true" ]]; then
  66. echo "==> Pushing: ${IMAGE_TAG}"
  67. docker push "$IMAGE_TAG"
  68. docker push "$LATEST_TAG"
  69. else
  70. echo "==> Skipping push"
  71. fi
  72. echo "==> Done"
  73. echo " ${IMAGE_TAG}"
  74. echo " ${LATEST_TAG}"