Hybrid Build Strategy: Manual BuildKit + Kaniko Pipeline Integration
Problem Statement
Kaniko cannot build images that use advanced BuildKit features like RUN --mount=from=. This includes Kaniko itself, which uses these features in its Dockerfile. Attempting to bootstrap Kaniko with Kaniko hits this fundamental limitation.
Root Cause Analysis
# From Kaniko's deploy/Dockerfile - incompatible with Kaniko executor
FROM scratch AS kaniko-base-slim
RUN --mount=from=busybox,dst=/usr/ ["busybox", "sh", "-c", "mkdir -p /kaniko && chmod 777 /kaniko"]
Kaniko does not support:
RUN --mount=from=<image>
RUN --mount=type=cache
- Other advanced BuildKit syntax
Solution: Hybrid Approach ✅
Phase 1: Manual Build Mode (IMPLEMENTED)
New build-config.yaml capability:
# For BuildKit-incompatible images
manual_build: true
manual_images:
amd64: "<ECR-REGISTRY>/kaniko/executor:v1.25.3-debug-amd64"
arm64: "<ECR-REGISTRY>/kaniko/executor:v1.25.3-debug-arm64"
Pipeline behavior:
- Detects
manual_build: true
- Skips Kaniko build entirely
- Uses pre-built images for manifest creation
- Maintains full pipeline integration
Phase 2: Manual Build Process (DOCUMENTED)
Created MANUAL_BUILD_PROCESS.md with:
- Step-by-step BuildKit build instructions
- Multi-architecture build commands
- ECR integration and authentication
- Pipeline configuration updates
- Verification and troubleshooting
Implementation Details
Files Modified
- ✅
kaniko/build-config.yaml - Added manual build configuration
- ✅
.gitlab-ci.yml - Added manual build detection and handling
- ✅
MANUAL_BUILD_PROCESS.md - Complete manual build documentation
Pipeline Logic
# New pipeline logic
if [ "$MANUAL_BUILD" = "true" ]; then
echo "🔧 Manual build mode detected"
MANUAL_IMAGE=$(get_manual_image_for_arch)
echo "$MANUAL_TAG" > "${dir}-${ARCH}.tag"
# Skip to manifest creation
fi
Benefits
Immediate Value
- ✅ Unblocks Kaniko builds: Can now build Kaniko using hybrid approach
- ✅ Maintains automation: Still uses pipeline for manifest creation
- ✅ Clean integration: No special cases in main pipeline logic
- ✅ Reproducible process: Documented manual build steps
Future Flexibility
- 🔧 BuildKit migration path: Easy transition when ready
- 🔧 Selective adoption: Choose best tool per image
- 🔧 Dev container integration: Can pre-configure build environment
Next Steps
- Execute manual Kaniko build using documented process
- Update kaniko/build-config.yaml with actual image tags
- Test pipeline integration with manual mode
- Validate multi-arch manifest creation
- Adopt self-built Kaniko for pipeline
Success Criteria
- ✅ Multi-arch Kaniko images built manually with BuildKit
- ✅ Pipeline creates multi-arch manifests from manual images
- ✅ Clean tags:
<ECR-REGISTRY>/kaniko/executor:debug
- ✅ Self-hosting: Use our Kaniko instead of upstream
Impact
This hybrid approach solves the bootstrapping problem while maintaining the benefits of both Kaniko (simple, secure) and BuildKit (feature-complete) depending on image requirements.
Hybrid Build Strategy: Manual BuildKit + Kaniko Pipeline Integration
Problem Statement
Kaniko cannot build images that use advanced BuildKit features like
RUN --mount=from=. This includes Kaniko itself, which uses these features in its Dockerfile. Attempting to bootstrap Kaniko with Kaniko hits this fundamental limitation.Root Cause Analysis
Kaniko does not support:
RUN --mount=from=<image>RUN --mount=type=cacheSolution: Hybrid Approach ✅
Phase 1: Manual Build Mode (IMPLEMENTED)
New
build-config.yamlcapability:Pipeline behavior:
manual_build: truePhase 2: Manual Build Process (DOCUMENTED)
Created
MANUAL_BUILD_PROCESS.mdwith:Implementation Details
Files Modified
kaniko/build-config.yaml- Added manual build configuration.gitlab-ci.yml- Added manual build detection and handlingMANUAL_BUILD_PROCESS.md- Complete manual build documentationPipeline Logic
Benefits
Immediate Value
Future Flexibility
Next Steps
Success Criteria
<ECR-REGISTRY>/kaniko/executor:debugImpact
This hybrid approach solves the bootstrapping problem while maintaining the benefits of both Kaniko (simple, secure) and BuildKit (feature-complete) depending on image requirements.