Skip to content

Woodpecker

Woodpecker is a simple yet extensible open-source CI engine (licensed under Apache 2.0), a community fork of Drone CI. It is the Continuous Integration part of the h8lio factory and acts as the link between your sources and the OCI image registry.

A pipeline is defined by a .woodpecker.yml file at the root of your repository. When you create a Service in h8lio, this file is scaffolded for you, already wired to build your image and push it to your private registry. Each step runs in its own container, and the registry credentials are injected as Woodpecker secrets.

The generated pipeline has three steps:

  • build runs on every push and tag. For a Spring Boot service it builds and verifies the JAR with Maven; for other stacks it leaves a placeholder command for you to fill in.
  • release runs on a git tag and pushes a versioned image (the v prefix is stripped, so the tag v1.2.3 produces the image tag 1.2.3).
  • latest runs on a push and pushes the latest image tag.

Images are built and pushed with the kaniko plugin and enriched with OCI annotations (git revision, version, build date, source URL).

# Woodpecker integration pipeline
steps:
- name: build
when:
- event: [push, tag]
# maven image (Spring Boot stack)
image: maven:3-eclipse-temurin-25-alpine
commands:
- mvn verify -B -V
- java -Djarmode=tools -jar target/*.jar extract --layers --launcher --destination target/extracted
# pushes a versioned image on a git tag
- name: release
when:
- event: tag
image: woodpeckerci/plugin-kaniko
settings:
registry: registry.h8l.io
repo: your-domain/your-service
username:
from_secret: registry_username
password:
from_secret: registry_password
# strip the 'v' prefix: tag v1.2.3 -> image tag 1.2.3
tags: ${CI_COMMIT_TAG##v}
build_args:
- GIT_REVISION=${CI_COMMIT_SHA}
- BUILD_VERSION=${CI_COMMIT_TAG##v}
- BUILD_DATE=${CI_PIPELINE_CREATED}
- SOURCE_URL=${CI_REPO_URL}
# pushes the 'latest' image on a push
- name: latest
when:
- event: push
image: woodpeckerci/plugin-kaniko
settings:
registry: registry.h8l.io
repo: your-domain/your-service
username:
from_secret: registry_username
password:
from_secret: registry_password
tags: latest
build_args:
- GIT_REVISION=${CI_COMMIT_SHA}
- BUILD_VERSION=latest
- BUILD_DATE=${CI_PIPELINE_CREATED}
- SOURCE_URL=${CI_REPO_URL}

References: