Skip to main content

Matrix builds

Woodpecker has integrated support for matrix builds. Woodpecker executes a separate build task for each combination in the matrix, allowing you to build and test a single commit against multiple configurations.

Example matrix definition:

matrix:
GO_VERSION:
- 1.4
- 1.3
REDIS_VERSION:
- 2.6
- 2.8
- 3.0

Example matrix definition containing only specific combinations:

matrix:
include:
- GO_VERSION: 1.4
REDIS_VERSION: 2.8
- GO_VERSION: 1.5
REDIS_VERSION: 2.8
- GO_VERSION: 1.6
REDIS_VERSION: 3.0

Interpolation

Matrix variables are interpolated in the yaml using the ${VARIABLE} syntax, before the yaml is parsed. This is an example yaml file before interpolating matrix parameters:

pipeline:
build:
image: golang:${GO_VERSION}
commands:
- go get
- go build
- go test

services:
database:
image: ${DATABASE}

matrix:
GO_VERSION:
- 1.4
- 1.3
DATABASE:
- mysql:5.5
- mysql:6.5
- mariadb:10.1

Example Yaml file after injecting the matrix parameters:

pipeline:
build:
- image: golang:${GO_VERSION}
+ image: golang:1.4
commands:
- go get
- go build
- go test
+ environment:
+ - GO_VERSION=1.4
+ - DATABASE=mysql:5.5

services:
database:
- image: ${DATABASE}
+ image: mysql:5.5

Examples

Example matrix build based on Docker image tag:

pipeline:
build:
image: golang:${TAG}
commands:
- go build
- go test

matrix:
TAG:
- 1.7
- 1.8
- latest

Example matrix build based on Docker image:

pipeline:
build:
image: ${IMAGE}
commands:
- go build
- go test

matrix:
IMAGE:
- golang:1.7
- golang:1.8
- golang:latest