Deleted the drone based CI/CD pipeline and wrote a simple buildx script to build the images manually.
This commit is contained in:
67
.drone.yml
67
.drone.yml
@@ -1,67 +0,0 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: ubuntu
|
||||
|
||||
steps:
|
||||
- name: create_tags
|
||||
image: ubuntu:latest
|
||||
commands:
|
||||
- echo "$(date "+%Y-%m-%d"), latest" > .tags
|
||||
|
||||
- name: ubuntu-24
|
||||
image: &image thegeeklab/drone-docker-buildx:24
|
||||
depends_on: &depends
|
||||
- create_tags
|
||||
environment:
|
||||
UBUNTU_VER: 24.04
|
||||
settings: &settings
|
||||
registry:
|
||||
from_secret: package-repo
|
||||
username:
|
||||
from_secret: gitea-username
|
||||
password:
|
||||
from_secret: gitea-password
|
||||
repo: ${DRONE_REPO_LINK:8}/ubuntu-24.04
|
||||
extra_tags:
|
||||
- ${DRONE_REPO_LINK:8}:24.04
|
||||
- ${DRONE_REPO_LINK:8}:latest
|
||||
build_args_from_env:
|
||||
UBUNTU_VER
|
||||
platforms:
|
||||
- linux/amd64
|
||||
- linux/arm64
|
||||
provenance: false
|
||||
cache_from:
|
||||
- type=local\\,src=/cache/${DRONE_REPO}/ubuntu-24.04
|
||||
cache_to:
|
||||
- type=local,dest=/cache/${DRONE_REPO}/ubuntu-24.04,mode=max
|
||||
|
||||
- name: ubuntu-22
|
||||
image: *image
|
||||
depends_on: *depends
|
||||
environment:
|
||||
UBUNTU_VER: 22.04
|
||||
settings:
|
||||
<<: *settings
|
||||
repo: ${DRONE_REPO_LINK:8}/ubuntu-22.04
|
||||
extra_tags:
|
||||
- ${DRONE_REPO_LINK:8}:22.04
|
||||
cache_from:
|
||||
- type=local\\,src=/cache/${DRONE_REPO}/ubuntu-22.04
|
||||
cache_to:
|
||||
- type=local,dest=/cache/${DRONE_REPO}/ubuntu-22.04,mode=max
|
||||
|
||||
- name: ubuntu-20
|
||||
image: *image
|
||||
depends_on: *depends
|
||||
environment:
|
||||
UBUNTU_VER: 20.04
|
||||
settings:
|
||||
<<: *settings
|
||||
repo: ${DRONE_REPO_LINK:8}/ubuntu-20.04
|
||||
extra_tags:
|
||||
- ${DRONE_REPO_LINK:8}:20.04
|
||||
cache_from:
|
||||
- type=local\\,src=/cache/${DRONE_REPO}/ubuntu-20.04
|
||||
cache_to:
|
||||
- type=local,dest=/cache/${DRONE_REPO}/ubuntu-20.04,mode=max
|
||||
@@ -1,4 +1,4 @@
|
||||
ARG UBUNTU_VER
|
||||
ARG UBUNTU_VER=24.04
|
||||
|
||||
FROM ubuntu:${UBUNTU_VER}
|
||||
|
||||
|
||||
205
build.sh
Executable file
205
build.sh
Executable file
@@ -0,0 +1,205 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
REGISTRY="${REGISTRY:-gitea.ahkhan.me}"
|
||||
REGISTRY_PATH="${REGISTRY_PATH:-docker}"
|
||||
REPO_PREFIX="${REPO_PREFIX:-ubuntu}"
|
||||
PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}"
|
||||
DATE_TAG=$(date +%Y-%m-%d)
|
||||
|
||||
# Ubuntu versions to build (in order, latest first)
|
||||
UBUNTU_VERSIONS=("24.04" "22.04" "20.04")
|
||||
LATEST_VERSION="24.04"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
log() {
|
||||
echo -e "${BLUE}[$(date '+%H:%M:%S')]${NC} $1"
|
||||
}
|
||||
|
||||
success() {
|
||||
echo -e "${GREEN}[$(date '+%H:%M:%S')]${NC} $1"
|
||||
}
|
||||
|
||||
warn() {
|
||||
echo -e "${YELLOW}[$(date '+%H:%M:%S')]${NC} $1"
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "${RED}[$(date '+%H:%M:%S')]${NC} $1"
|
||||
}
|
||||
|
||||
# Function to build single Ubuntu version
|
||||
build_ubuntu_version() {
|
||||
local version=$1
|
||||
local repo_name="${REPO_PREFIX}-${version}"
|
||||
|
||||
log "Building Ubuntu ${version}..."
|
||||
|
||||
# Build tags for this version
|
||||
local tags=(
|
||||
"${REGISTRY}/${REGISTRY_PATH}/${repo_name}:latest"
|
||||
"${REGISTRY}/${REGISTRY_PATH}/${repo_name}:${DATE_TAG}"
|
||||
)
|
||||
|
||||
# Add ubuntu:latest tag only for the latest version
|
||||
if [[ "$version" == "$LATEST_VERSION" ]]; then
|
||||
tags+=("${REGISTRY}/${REGISTRY_PATH}/${REPO_PREFIX}:latest")
|
||||
fi
|
||||
|
||||
# Build tag arguments
|
||||
local tag_args=""
|
||||
for tag in "${tags[@]}"; do
|
||||
tag_args="$tag_args --tag $tag"
|
||||
done
|
||||
|
||||
# Cache configuration
|
||||
local cache_from="${REGISTRY}/${REGISTRY_PATH}/${repo_name}:buildcache"
|
||||
local cache_to="${REGISTRY}/${REGISTRY_PATH}/${repo_name}:buildcache"
|
||||
|
||||
log "Tags: ${tags[*]}"
|
||||
log "Cache from/to: $cache_from"
|
||||
|
||||
# Build command
|
||||
docker buildx build \
|
||||
--platform "$PLATFORMS" \
|
||||
--build-arg UBUNTU_VER="$version" \
|
||||
$tag_args \
|
||||
--cache-from "type=registry,ref=$cache_from" \
|
||||
--cache-to "type=registry,ref=$cache_to,mode=max" \
|
||||
--push \
|
||||
.
|
||||
|
||||
success "Ubuntu ${version} build completed successfully"
|
||||
|
||||
# Clear local builder cache to save disk space (registry cache is preserved)
|
||||
log "Clearing local builder cache for Ubuntu ${version}..."
|
||||
docker buildx prune --filter type=exec.cachemount --filter type=regular --force >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
# Function to validate Docker buildx setup
|
||||
validate_setup() {
|
||||
log "Validating Docker buildx setup..."
|
||||
|
||||
if ! command -v docker &> /dev/null; then
|
||||
error "Docker is not installed or not in PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker buildx version &> /dev/null; then
|
||||
error "Docker buildx is not available"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Always use multiarch builder for consistency and reliability
|
||||
# Reasons: better registry caching, isolated BuildKit, predictable multi-arch behavior
|
||||
log "Setting up multiarch builder for optimal registry caching and multi-platform support..."
|
||||
|
||||
# Install binfmt for cross-platform emulation
|
||||
log "Setting up cross-platform emulation..."
|
||||
docker run --privileged --rm tonistiigi/binfmt --install all
|
||||
|
||||
# Create or reuse multiarch builder
|
||||
if docker buildx ls | grep -q "^multiarch"; then
|
||||
log "Using existing multiarch builder"
|
||||
docker buildx use multiarch
|
||||
else
|
||||
log "Creating new multiarch builder"
|
||||
docker buildx create --name multiarch --driver docker-container --use
|
||||
fi
|
||||
|
||||
# Bootstrap the builder
|
||||
docker buildx inspect --bootstrap
|
||||
|
||||
success "Multiarch builder setup completed"
|
||||
}
|
||||
|
||||
# Function to show build summary
|
||||
show_summary() {
|
||||
log "Build Summary:"
|
||||
echo "Registry: $REGISTRY"
|
||||
echo "Date tag: $DATE_TAG"
|
||||
echo "Platforms: $PLATFORMS"
|
||||
echo "Ubuntu versions: ${UBUNTU_VERSIONS[*]}"
|
||||
echo ""
|
||||
|
||||
echo "Images that will be built:"
|
||||
for version in "${UBUNTU_VERSIONS[@]}"; do
|
||||
echo " ${REGISTRY}/${REGISTRY_PATH}/${REPO_PREFIX}-${version}:latest"
|
||||
echo " ${REGISTRY}/${REGISTRY_PATH}/${REPO_PREFIX}-${version}:${DATE_TAG}"
|
||||
echo " ${REGISTRY}/${REGISTRY_PATH}/${REPO_PREFIX}-${version}:buildcache (cache)"
|
||||
if [[ "$version" == "$LATEST_VERSION" ]]; then
|
||||
echo " ${REGISTRY}/${REGISTRY_PATH}/${REPO_PREFIX}:latest"
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
log "Starting Ubuntu Docker images build process"
|
||||
|
||||
# Validate environment
|
||||
validate_setup
|
||||
|
||||
# Show what will be built
|
||||
show_summary
|
||||
|
||||
# Confirm before proceeding
|
||||
read -p "Proceed with build? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
warn "Build cancelled by user"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Build each version
|
||||
for version in "${UBUNTU_VERSIONS[@]}"; do
|
||||
build_ubuntu_version "$version"
|
||||
done
|
||||
|
||||
success "All Ubuntu images built successfully!"
|
||||
|
||||
log "Available images:"
|
||||
for version in "${UBUNTU_VERSIONS[@]}"; do
|
||||
echo " ${REGISTRY}/${REGISTRY_PATH}/${REPO_PREFIX}-${version}:latest"
|
||||
echo " ${REGISTRY}/${REGISTRY_PATH}/${REPO_PREFIX}-${version}:${DATE_TAG}"
|
||||
done
|
||||
echo " ${REGISTRY}/${REGISTRY_PATH}/${REPO_PREFIX}:latest (→ Ubuntu ${LATEST_VERSION})"
|
||||
}
|
||||
|
||||
# Help function
|
||||
show_help() {
|
||||
echo "Ubuntu Docker Build Script"
|
||||
echo ""
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Environment Variables:"
|
||||
echo " REGISTRY Docker registry (default: gitea.ahkhan.me)"
|
||||
echo " REGISTRY_PATH Registry path (default: docker)"
|
||||
echo " REPO_PREFIX Repository prefix (default: ubuntu)"
|
||||
echo " PLATFORMS Target platforms (default: linux/amd64,linux/arm64)"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " REGISTRY=myregistry.com ./build.sh"
|
||||
echo " PLATFORMS=linux/amd64 ./build.sh"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Handle arguments
|
||||
case "${1:-}" in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
main "$@"
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user