This commit is contained in:
2026-03-26 09:47:13 +08:00
commit dce2088374
7 changed files with 500 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
name: 'Docker Build and Push'
description: 'Log into Harbor, build and push image'
inputs:
harbor_user:
description: 'Harbor Username'
required: true
harbor_secret:
description: 'Harbor Secret'
required: true
image_repo:
description: 'Harbor Image Repository (without tag)'
required: true
dockerfile:
description: 'Path to Dockerfile'
required: false
default: './Dockerfile'
build_context:
description: 'Docker Build Context'
required: false
default: '.'
docker_build_args:
description: 'Docker Build Args as multiple lines or single line'
required: false
default: ''
harbor_host:
description: 'Harbor Host'
required: false
default: 'harbor.hclife.co'
outputs:
image_tag:
description: 'Generated Image Tag (UTC timestamp)'
value: ${{ steps.build_push.outputs.image_tag }}
runs:
using: 'composite'
steps:
- name: Build and Push
id: build_push
shell: bash
env:
DOCKER_BUILDKIT: 1
HARBOR_USER: ${{ inputs.harbor_user }}
HARBOR_SECRET: ${{ inputs.harbor_secret }}
COMMIT_SHA: ${{ github.sha }}
IMAGE_REPO: ${{ inputs.image_repo }}
DOCKERFILE: ${{ inputs.dockerfile }}
BUILD_CONTEXT: ${{ inputs.build_context }}
DOCKER_BUILD_ARGS: ${{ inputs.docker_build_args }}
HARBOR_HOST: ${{ inputs.harbor_host }}
run: |
set -eu
IMAGE_TAG="$(date -u +%Y%m%d-%H%M%S)"
echo "image_tag=$IMAGE_TAG" >> "$GITHUB_OUTPUT"
test -n "$IMAGE_REPO"
test -n "$DOCKERFILE"
test -n "$BUILD_CONTEXT"
test -f "$DOCKERFILE"
test -d "$BUILD_CONTEXT"
echo "Logging into $HARBOR_HOST..."
echo "$HARBOR_SECRET" | docker login "$HARBOR_HOST" -u "$HARBOR_USER" --password-stdin
BUILD_ARG_FLAGS=()
if [ -n "$DOCKER_BUILD_ARGS" ]; then
while IFS= read -r build_arg_line; do
[ -n "$build_arg_line" ] || continue
BUILD_ARG_FLAGS+=("--build-arg" "$build_arg_line")
done <<< "$DOCKER_BUILD_ARGS"
fi
echo "Building Image..."
if [ ${#BUILD_ARG_FLAGS[@]} -gt 0 ]; then
docker build "${BUILD_ARG_FLAGS[@]}" \
-t "$IMAGE_REPO:$IMAGE_TAG" \
-t "$IMAGE_REPO:$COMMIT_SHA" \
-t "$IMAGE_REPO:latest" \
-f "$DOCKERFILE" "$BUILD_CONTEXT"
else
docker build \
-t "$IMAGE_REPO:$IMAGE_TAG" \
-t "$IMAGE_REPO:$COMMIT_SHA" \
-t "$IMAGE_REPO:latest" \
-f "$DOCKERFILE" "$BUILD_CONTEXT"
fi
echo "Pushing Image..."
docker push "$IMAGE_REPO:$IMAGE_TAG"
docker push "$IMAGE_REPO:$COMMIT_SHA"
docker push "$IMAGE_REPO:latest"