| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/usr/bin/env bash
- # Build and push Docker image from project source.
- #
- # Usage:
- # ./scripts/docker-deploy.sh
- #
- # Custom build directory / registry / tag:
- # BUILD_DIR=/your/build/path \
- # IMAGE_REGISTRY=registry-vpc.cn-hangzhou.aliyuncs.com/stuuudy/external_demand \
- # BUILD_TIMESTAMP=20260717143000 \
- # ./scripts/docker-deploy.sh
- #
- # Environment variables:
- # BUILD_DIR Source directory containing Dockerfile (default: repo root)
- # IMAGE_REGISTRY Docker image repository
- # BUILD_TIMESTAMP Image tag (default: YYYYMMDDHHMMSS)
- # PUSH Push after build (default: true)
- set -euo pipefail
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
- BUILD_DIR="${BUILD_DIR:-$PROJECT_ROOT}"
- IMAGE_REGISTRY="${IMAGE_REGISTRY:-registry-vpc.cn-hangzhou.aliyuncs.com/stuuudy/external_demand}"
- BUILD_TIMESTAMP="${BUILD_TIMESTAMP:-$(date +%Y%m%d%H%M%S)}"
- PUSH="${PUSH:-true}"
- IMAGE_TAG="${IMAGE_REGISTRY}:${BUILD_TIMESTAMP}"
- LATEST_TAG="${IMAGE_REGISTRY}:latest"
- usage() {
- cat <<EOF
- Usage: $(basename "$0") [options]
- Options:
- --no-push Build only, do not push to registry
- -h, --help Show this help
- Environment:
- BUILD_DIR ${BUILD_DIR}
- IMAGE_REGISTRY ${IMAGE_REGISTRY}
- BUILD_TIMESTAMP ${BUILD_TIMESTAMP}
- EOF
- }
- while [[ $# -gt 0 ]]; do
- case "$1" in
- --no-push)
- PUSH=false
- shift
- ;;
- -h|--help)
- usage
- exit 0
- ;;
- *)
- echo "Unknown option: $1" >&2
- usage
- exit 1
- ;;
- esac
- done
- echo "==> Building from: ${BUILD_DIR}"
- echo "==> Image tag: ${IMAGE_TAG}"
- cd "$BUILD_DIR"
- docker build -t "$IMAGE_TAG" -t "$LATEST_TAG" .
- if [[ "$PUSH" == "true" ]]; then
- echo "==> Pushing: ${IMAGE_TAG}"
- docker push "$IMAGE_TAG"
- docker push "$LATEST_TAG"
- else
- echo "==> Skipping push"
- fi
- echo "==> Done"
- echo " ${IMAGE_TAG}"
- echo " ${LATEST_TAG}"
|