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:
@@ -136,12 +136,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Setup Docker Buildx
|
- name: Setup Docker Buildx
|
||||||
run: |
|
run: |
|
||||||
# Install Docker Buildx if not present
|
# Buildx ist bereits im docker-build Image installiert
|
||||||
if ! docker buildx version &>/dev/null; then
|
|
||||||
mkdir -p ~/.docker/cli-plugins
|
|
||||||
curl -L "https://github.com/docker/buildx/releases/latest/download/buildx-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)" -o ~/.docker/cli-plugins/docker-buildx
|
|
||||||
chmod +x ~/.docker/cli-plugins/docker-buildx
|
|
||||||
fi
|
|
||||||
docker buildx create --name builder --use || docker buildx use builder
|
docker buildx create --name builder --use || docker buildx use builder
|
||||||
docker buildx inspect --bootstrap
|
docker buildx inspect --bootstrap
|
||||||
|
|
||||||
|
|||||||
@@ -1,43 +1,69 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Build CI Docker Image for Gitea Actions Runner
|
# Build CI Docker Images for Gitea Actions Runner
|
||||||
# This image contains PHP 8.5, Composer, Ansible, and other CI tools
|
# - php-ci: PHP 8.5, Composer, Ansible, and other CI tools
|
||||||
|
# - docker-build: Docker CLI, Buildx, Git, Bash
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && 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..."
|
# PHP CI Image
|
||||||
echo " Image: ${IMAGE_NAME}"
|
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 " 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"
|
cd "$PROJECT_ROOT"
|
||||||
|
|
||||||
# Build the image
|
# Build PHP CI image
|
||||||
|
echo ""
|
||||||
|
echo "📦 Building PHP CI image..."
|
||||||
docker build \
|
docker build \
|
||||||
-f docker/ci/Dockerfile \
|
-f docker/ci/Dockerfile \
|
||||||
-t "${IMAGE_NAME}" \
|
-t "${PHP_CI_IMAGE}" \
|
||||||
-t "${REGISTRY_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 \
|
--platform linux/amd64 \
|
||||||
.
|
.
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "✅ Image built successfully!"
|
echo "✅ Images built successfully!"
|
||||||
echo ""
|
echo ""
|
||||||
echo "📋 Next steps:"
|
echo "📋 Next steps:"
|
||||||
echo ""
|
echo ""
|
||||||
echo "1. Tag and push to registry (if using registry):"
|
echo "1. Tag and push to registry (if using registry):"
|
||||||
echo " docker login ${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 ""
|
||||||
echo "2. Update GITEA_RUNNER_LABELS in .env:"
|
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 ""
|
||||||
echo "3. Or use registry image:"
|
echo "3. Or use registry images:"
|
||||||
echo " Add: php-ci:docker://${REGISTRY_IMAGE}"
|
echo " Add: php-ci:docker://${PHP_CI_REGISTRY_IMAGE}"
|
||||||
|
echo " Add: docker-build:docker://${DOCKER_BUILD_REGISTRY_IMAGE}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "4. Restart runner to pick up new labels:"
|
echo "4. Restart runner to pick up new labels:"
|
||||||
echo " cd deployment/gitea-runner"
|
echo " cd deployment/gitea-runner"
|
||||||
@@ -48,13 +74,15 @@ echo ""
|
|||||||
|
|
||||||
# Ask if user wants to push to registry
|
# Ask if user wants to push to registry
|
||||||
if [ -n "$CI_REGISTRY" ] && [ -n "$CI_REGISTRY_USER" ] && [ -n "$CI_REGISTRY_PASSWORD" ]; then
|
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
|
echo
|
||||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
echo "🔐 Logging in to registry..."
|
echo "🔐 Logging in to registry..."
|
||||||
echo "$CI_REGISTRY_PASSWORD" | docker login "$REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin
|
echo "$CI_REGISTRY_PASSWORD" | docker login "$REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin
|
||||||
echo "📤 Pushing image..."
|
echo "📤 Pushing PHP CI image..."
|
||||||
docker push "${REGISTRY_IMAGE}"
|
docker push "${PHP_CI_REGISTRY_IMAGE}"
|
||||||
echo "✅ Image pushed to ${REGISTRY_IMAGE}"
|
echo "📤 Pushing Docker Build image..."
|
||||||
|
docker push "${DOCKER_BUILD_REGISTRY_IMAGE}"
|
||||||
|
echo "✅ Images pushed to registry"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
30
docker/ci/Dockerfile.build
Normal file
30
docker/ci/Dockerfile.build
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Dockerfile für Docker Build Jobs in CI/CD
|
||||||
|
# Enthält: Docker CLI, Docker Buildx, Git, Bash
|
||||||
|
FROM docker:latest
|
||||||
|
|
||||||
|
# Installiere zusätzliche Tools
|
||||||
|
RUN apk add --no-cache \
|
||||||
|
git \
|
||||||
|
bash \
|
||||||
|
curl \
|
||||||
|
openssh-client \
|
||||||
|
ca-certificates
|
||||||
|
|
||||||
|
# Installiere Docker Buildx
|
||||||
|
RUN mkdir -p /root/.docker/cli-plugins && \
|
||||||
|
ARCH=$(uname -m) && \
|
||||||
|
if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \
|
||||||
|
curl -L "https://github.com/docker/buildx/releases/download/v0.13.2/buildx-v0.13.2.linux-${ARCH}" \
|
||||||
|
-o /root/.docker/cli-plugins/docker-buildx && \
|
||||||
|
chmod +x /root/.docker/cli-plugins/docker-buildx
|
||||||
|
|
||||||
|
# Verifiziere Installation (Buildx wird beim ersten Aufruf initialisiert, daher nur Basis-Checks)
|
||||||
|
RUN docker --version && \
|
||||||
|
git --version && \
|
||||||
|
bash --version
|
||||||
|
|
||||||
|
# Arbeitsverzeichnis
|
||||||
|
WORKDIR /workspace
|
||||||
|
|
||||||
|
# Standard-User für CI (UID/GID 1000)
|
||||||
|
RUN addgroup -g 1000 ci && adduser -u 1000 -G ci -D ci
|
||||||
Reference in New Issue
Block a user