Add custom docker-build image for CI workflows

- Created Dockerfile.build with Docker CLI, Buildx, Git, Bash
- Updated build-ci-image.sh to build both php-ci and docker-build images
- Updated workflow to use docker-build image (no installation needed)
- Updated runner .env to use docker-build:latest instead of docker:latest
This commit is contained in:
2025-10-31 16:00:56 +01:00
parent 001aa1c9b0
commit dfb1d9bd5d
3 changed files with 78 additions and 25 deletions

View File

@@ -1,43 +1,69 @@
#!/bin/bash
# Build CI Docker Image for Gitea Actions Runner
# This image contains PHP 8.5, Composer, Ansible, and other CI tools
# Build CI Docker Images for Gitea Actions Runner
# - php-ci: PHP 8.5, Composer, Ansible, and other CI tools
# - docker-build: Docker CLI, Buildx, Git, Bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
IMAGE_NAME="${CI_IMAGE_NAME:-php-ci:latest}"
REGISTRY="${CI_REGISTRY:-registry.michaelschiemer.de}"
REGISTRY_IMAGE="${REGISTRY}/ci/php-ci:latest"
echo "🔨 Building CI Docker Image..."
echo " Image: ${IMAGE_NAME}"
# PHP CI Image
PHP_CI_IMAGE="${CI_IMAGE_NAME:-php-ci:latest}"
REGISTRY="${CI_REGISTRY:-registry.michaelschiemer.de}"
PHP_CI_REGISTRY_IMAGE="${REGISTRY}/ci/php-ci:latest"
# Docker Build Image
DOCKER_BUILD_IMAGE="${DOCKER_BUILD_IMAGE_NAME:-docker-build:latest}"
DOCKER_BUILD_REGISTRY_IMAGE="${REGISTRY}/ci/docker-build:latest"
echo "🔨 Building CI Docker Images..."
echo ""
echo "1. PHP CI Image: ${PHP_CI_IMAGE}"
echo " Dockerfile: ${PROJECT_ROOT}/docker/ci/Dockerfile"
echo ""
echo "2. Docker Build Image: ${DOCKER_BUILD_IMAGE}"
echo " Dockerfile: ${PROJECT_ROOT}/docker/ci/Dockerfile.build"
cd "$PROJECT_ROOT"
# Build the image
# Build PHP CI image
echo ""
echo "📦 Building PHP CI image..."
docker build \
-f docker/ci/Dockerfile \
-t "${IMAGE_NAME}" \
-t "${REGISTRY_IMAGE}" \
-t "${PHP_CI_IMAGE}" \
-t "${PHP_CI_REGISTRY_IMAGE}" \
--platform linux/amd64 \
.
# Build Docker Build image
echo ""
echo "📦 Building Docker Build image..."
docker build \
-f docker/ci/Dockerfile.build \
-t "${DOCKER_BUILD_IMAGE}" \
-t "${DOCKER_BUILD_REGISTRY_IMAGE}" \
--platform linux/amd64 \
.
echo ""
echo "✅ Image built successfully!"
echo "✅ Images built successfully!"
echo ""
echo "📋 Next steps:"
echo ""
echo "1. Tag and push to registry (if using registry):"
echo " docker login ${REGISTRY}"
echo " docker push ${REGISTRY_IMAGE}"
echo " docker push ${PHP_CI_REGISTRY_IMAGE}"
echo " docker push ${DOCKER_BUILD_REGISTRY_IMAGE}"
echo ""
echo "2. Update GITEA_RUNNER_LABELS in .env:"
echo " Add: php-ci:docker://${IMAGE_NAME}"
echo " Add: php-ci:docker://${PHP_CI_IMAGE}"
echo " Add: docker-build:docker://${DOCKER_BUILD_IMAGE}"
echo ""
echo "3. Or use registry image:"
echo " Add: php-ci:docker://${REGISTRY_IMAGE}"
echo "3. Or use registry images:"
echo " Add: php-ci:docker://${PHP_CI_REGISTRY_IMAGE}"
echo " Add: docker-build:docker://${DOCKER_BUILD_REGISTRY_IMAGE}"
echo ""
echo "4. Restart runner to pick up new labels:"
echo " cd deployment/gitea-runner"
@@ -48,13 +74,15 @@ echo ""
# Ask if user wants to push to registry
if [ -n "$CI_REGISTRY" ] && [ -n "$CI_REGISTRY_USER" ] && [ -n "$CI_REGISTRY_PASSWORD" ]; then
read -p "Push image to registry? (y/N) " -n 1 -r
read -p "Push images to registry? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "🔐 Logging in to registry..."
echo "$CI_REGISTRY_PASSWORD" | docker login "$REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin
echo "📤 Pushing image..."
docker push "${REGISTRY_IMAGE}"
echo "✅ Image pushed to ${REGISTRY_IMAGE}"
echo "📤 Pushing PHP CI image..."
docker push "${PHP_CI_REGISTRY_IMAGE}"
echo "📤 Pushing Docker Build image..."
docker push "${DOCKER_BUILD_REGISTRY_IMAGE}"
echo "✅ Images pushed to registry"
fi
fi