mirror of
https://github.com/johndoe6345789/low-code-react-app-b.git
synced 2026-04-24 13:44:54 +00:00
Generated by Spark: Add qemu to CI/CD processes.
This commit is contained in:
130
scripts/build-multiarch.sh
Normal file
130
scripts/build-multiarch.sh
Normal file
@@ -0,0 +1,130 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Multi-Architecture Docker Build Script
|
||||
# This script demonstrates how to build multi-arch images locally with QEMU
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Multi-Architecture Docker Build with QEMU"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
IMAGE_NAME="${1:-myapp}"
|
||||
IMAGE_TAG="${2:-latest}"
|
||||
PLATFORMS="${3:-linux/amd64,linux/arm64}"
|
||||
REGISTRY="${4:-ghcr.io}"
|
||||
|
||||
echo "📋 Configuration:"
|
||||
echo " Image Name: $IMAGE_NAME"
|
||||
echo " Image Tag: $IMAGE_TAG"
|
||||
echo " Platforms: $PLATFORMS"
|
||||
echo " Registry: $REGISTRY"
|
||||
echo ""
|
||||
|
||||
# Check if Docker is installed
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo -e "${RED}❌ Docker is not installed${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✅ Docker is installed${NC}"
|
||||
|
||||
# Check if Docker Buildx is available
|
||||
if ! docker buildx version &> /dev/null; then
|
||||
echo -e "${RED}❌ Docker Buildx is not available${NC}"
|
||||
echo "Installing Docker Buildx..."
|
||||
docker buildx install
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✅ Docker Buildx is available${NC}"
|
||||
|
||||
# Set up QEMU
|
||||
echo ""
|
||||
echo "🔧 Setting up QEMU for multi-architecture builds..."
|
||||
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ QEMU setup successful${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ QEMU setup failed${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create or use existing buildx builder
|
||||
echo ""
|
||||
echo "🔧 Setting up Docker Buildx builder..."
|
||||
if docker buildx inspect multiarch &> /dev/null; then
|
||||
echo -e "${YELLOW}⚠️ Builder 'multiarch' already exists, using existing${NC}"
|
||||
docker buildx use multiarch
|
||||
else
|
||||
docker buildx create --name multiarch --driver docker-container --use
|
||||
echo -e "${GREEN}✅ Created new builder 'multiarch'${NC}"
|
||||
fi
|
||||
|
||||
docker buildx inspect --bootstrap
|
||||
|
||||
# Build the multi-architecture image
|
||||
echo ""
|
||||
echo "🏗️ Building multi-architecture Docker image..."
|
||||
echo " This may take several minutes..."
|
||||
echo ""
|
||||
|
||||
BUILD_ARGS=""
|
||||
if [ "$5" = "--push" ]; then
|
||||
BUILD_ARGS="--push"
|
||||
echo " Will push to registry after build"
|
||||
else
|
||||
BUILD_ARGS="--load"
|
||||
echo " Will load into local Docker daemon (single platform)"
|
||||
# When loading, we can only build for one platform
|
||||
PLATFORMS="linux/amd64"
|
||||
echo -e "${YELLOW}⚠️ Loading locally, building only for linux/amd64${NC}"
|
||||
fi
|
||||
|
||||
docker buildx build \
|
||||
--platform $PLATFORMS \
|
||||
--tag $REGISTRY/$IMAGE_NAME:$IMAGE_TAG \
|
||||
$BUILD_ARGS \
|
||||
.
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ Build successful!${NC}"
|
||||
echo ""
|
||||
echo "📦 Built images:"
|
||||
echo " $REGISTRY/$IMAGE_NAME:$IMAGE_TAG"
|
||||
echo " Platforms: $PLATFORMS"
|
||||
|
||||
if [ "$5" = "--push" ]; then
|
||||
echo ""
|
||||
echo "🎉 Images pushed to registry!"
|
||||
echo ""
|
||||
echo "To pull the image:"
|
||||
echo " docker pull $REGISTRY/$IMAGE_NAME:$IMAGE_TAG"
|
||||
else
|
||||
echo ""
|
||||
echo "🎉 Image loaded into local Docker!"
|
||||
echo ""
|
||||
echo "To run the image:"
|
||||
echo " docker run -p 80:80 $REGISTRY/$IMAGE_NAME:$IMAGE_TAG"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "To inspect the manifest:"
|
||||
echo " docker manifest inspect $REGISTRY/$IMAGE_NAME:$IMAGE_TAG"
|
||||
else
|
||||
echo ""
|
||||
echo -e "${RED}❌ Build failed${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo "✨ Build process complete!"
|
||||
Reference in New Issue
Block a user