build-push.sh 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/bash
  2. # Build and push Docker image
  3. # Usage: ./build-push.sh [--tag TAG] [--registry REGISTRY] [--push]
  4. set -e
  5. # Defaults
  6. REGISTRY="${DOCKER_REGISTRY:-}"
  7. TAG="${IMAGE_TAG:-latest}"
  8. PUSH=false
  9. DOCKERFILE="Dockerfile"
  10. CONTEXT="."
  11. # Parse arguments
  12. while [[ $# -gt 0 ]]; do
  13. case $1 in
  14. --tag|-t)
  15. TAG="$2"
  16. shift 2
  17. ;;
  18. --registry|-r)
  19. REGISTRY="$2"
  20. shift 2
  21. ;;
  22. --push|-p)
  23. PUSH=true
  24. shift
  25. ;;
  26. --dockerfile|-f)
  27. DOCKERFILE="$2"
  28. shift 2
  29. ;;
  30. --context|-c)
  31. CONTEXT="$2"
  32. shift 2
  33. ;;
  34. *)
  35. echo "Unknown option: $1"
  36. exit 1
  37. ;;
  38. esac
  39. done
  40. # Get image name from directory or git
  41. if [ -z "$IMAGE_NAME" ]; then
  42. IMAGE_NAME=$(basename "$(pwd)")
  43. fi
  44. # Build full image name
  45. if [ -n "$REGISTRY" ]; then
  46. FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${TAG}"
  47. else
  48. FULL_IMAGE="${IMAGE_NAME}:${TAG}"
  49. fi
  50. echo "=== Building Docker Image ==="
  51. echo "Image: $FULL_IMAGE"
  52. echo "Dockerfile: $DOCKERFILE"
  53. echo "Context: $CONTEXT"
  54. echo ""
  55. # Build
  56. docker build \
  57. -t "$FULL_IMAGE" \
  58. -f "$DOCKERFILE" \
  59. --build-arg BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \
  60. --build-arg VCS_REF="$(git rev-parse --short HEAD 2>/dev/null || echo 'unknown')" \
  61. "$CONTEXT"
  62. echo ""
  63. echo "=== Build Complete ==="
  64. echo "Image: $FULL_IMAGE"
  65. # Push if requested
  66. if [ "$PUSH" = true ]; then
  67. echo ""
  68. echo "=== Pushing Image ==="
  69. docker push "$FULL_IMAGE"
  70. echo "Pushed: $FULL_IMAGE"
  71. fi
  72. # Show image info
  73. echo ""
  74. echo "=== Image Info ==="
  75. docker images "$FULL_IMAGE" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}"