woodpecker/docs/docs/20-usage/30-matrix-workflows.md
Robert Kaussow 36e13670e8
Bump follow-redirects and fix broken anchors (#3488)
- Bump `follow-redirects` to fix sec scan
- Remove archived plugin `Chart releaser`
- Fix broken anchors

```
Exhaustive list of all broken anchors found:
- Broken anchor on source page path = /docs/0.15/administration/agent-config:
   -> linking to /docs/0.15/usage/pipeline-syntax#step-when---conditional-execution
- Broken anchor on source page path = /docs/0.15/development/docs:
   -> linking to /docs/0.15/development/getting-started#nodejs--yarn
- Broken anchor on source page path = /docs/0.15/development/ui:
   -> linking to /docs/0.15/development/getting-started#nodejs--yarn
   -> linking to /docs/0.15/development/getting-started#debugging
- Broken anchor on source page path = /docs/1.0/development/ui:
   -> linking to /docs/1.0/development/getting-started#debugging
- Broken anchor on source page path = /docs/2.0/administration/agent-config:
   -> linking to /docs/2.0/administration/backends/kubernetes#configuration
- Broken anchor on source page path = /docs/2.0/administration/server-config:
   -> linking to forges/github#configuration (resolved as: /docs/2.0/administration/forges/github#configuration)
- Broken anchor on source page path = /docs/2.0/development/ui:
   -> linking to /docs/2.0/development/getting-started#debugging
- Broken anchor on source page path = /docs/2.0/usage/matrix-workflows:
   -> linking to /docs/2.0/administration/backends/kubernetes#nodeSelector
- Broken anchor on source page path = /docs/2.1/administration/agent-config:
   -> linking to /docs/2.1/administration/backends/kubernetes#configuration
- Broken anchor on source page path = /docs/2.1/development/ui:
   -> linking to /docs/2.1/development/getting-started#debugging
- Broken anchor on source page path = /docs/2.1/usage/matrix-workflows:
   -> linking to /docs/2.1/administration/backends/kubernetes#nodeSelector
- Broken anchor on source page path = /docs/2.2/administration/agent-config:
   -> linking to /docs/2.2/administration/backends/local#further-configuration
- Broken anchor on source page path = /docs/2.2/development/ui:
   -> linking to /docs/2.2/development/getting-started#debugging
- Broken anchor on source page path = /docs/2.2/usage/matrix-workflows:
   -> linking to /docs/2.2/administration/backends/kubernetes#nodeSelector
- Broken anchor on source page path = /docs/next/administration/agent-config:
   -> linking to /docs/next/administration/backends/local#further-configuration
- Broken anchor on source page path = /docs/next/development/ui:
   -> linking to /docs/next/development/getting-started#debugging
- Broken anchor on source page path = /docs/next/usage/matrix-workflows:
   -> linking to /docs/next/administration/backends/kubernetes#nodeSelector
- Broken anchor on source page path = /docs/next/usage/plugins/creating-plugins:
   -> linking to /docs/next/usage/secrets#use-secrets-in-settings
- Broken anchor on source page path = /docs/administration/agent-config:
   -> linking to /docs/administration/backends/local#further-configuration
- Broken anchor on source page path = /docs/development/ui:
   -> linking to /docs/development/getting-started#debugging
- Broken anchor on source page path = /docs/usage/matrix-workflows:
   -> linking to /docs/administration/backends/kubernetes#nodeSelector
```
2024-03-15 11:56:31 +01:00

2.5 KiB

Matrix workflows

Woodpecker has integrated support for matrix workflows. Woodpecker executes a separate workflow for each combination in the matrix, allowing you to build and test 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:

matrix:
  GO_VERSION:
    - 1.4
    - 1.3
  DATABASE:
    - mysql:8
    - mysql:5
    - mariadb:10.1

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

services:
  - name: database
    image: ${DATABASE}

Example YAML file after injecting the matrix parameters:

 steps:
   - name: build
-    image: golang:${GO_VERSION}
+    image: golang:1.4
     commands:
       - go get
       - go build
       - go test
+    environment:
+      - GO_VERSION=1.4
+      - DATABASE=mysql:8

 services:
   - name: database
-    image: ${DATABASE}
+    image: mysql:8

Examples

Example matrix pipeline based on Docker image tag

matrix:
  TAG:
    - 1.7
    - 1.8
    - latest

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

Example matrix pipeline based on container image

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

steps:
  - name: build
    image: ${IMAGE}
    commands:
      - go build
      - go test

Example matrix pipeline using multiple platforms

matrix:
  platform:
    - linux/amd64
    - linux/arm64

labels:
  platform: ${platform}

steps:
  - name: test
    image: alpine
    commands:
      - echo "I am running on ${platform}"

  - name: test-arm-only
    image: alpine
    commands:
      - echo "I am running on ${platform}"
      - echo "Arm is cool!"
    when:
      platform: linux/arm*

:::note If you want to control the architecture of a pipeline on a Kubernetes runner, see the nodeSelector documentation of the Kubernetes backend. :::