# woodpecker

![Version: 3.1.0](https://img.shields.io/badge/Version-3.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 3.5.2](https://img.shields.io/badge/AppVersion-3.5.2-informational?style=flat-square)

**Source Code**: <https://github.com/woodpecker-ci/woodpecker>

## Installation

To install the latest release of the chart:

```sh
# since > 1.6.1
helm install woodpecker oci://ghcr.io/woodpecker-ci/helm --version <VERSION>

# deprecated (but still functional)
helm repo add woodpecker https://woodpecker-ci.org/
helm install woodpecker woodpecker/woodpecker
```

**Note**: The `woodpecker/woodpecker` chart contains both the server and the agent.
If you want to install only the server or agent you can use the [`woodpecker/server`](./charts/server/README.md) or [`woodpecker/agent`](./charts/server/README.md) charts respectively.

### Backend Configuration

The Kubernetes backend configuration is documented in greater detail in the Woodpecker [documentation](https://woodpecker-ci.org/docs/next/administration/backends/kubernetes).

### Terraform

If you're using the `helm-release` terraform module, the following definition can be used:

```hcl
resource "helm_release" "woodpecker" {
  name             = "woodpecker"
  chart            = "woodpecker"
  repository       = "https://woodpecker-ci.org/"
  create_namespace = true # optional
  version          = 3.1.0
  namespace        = "woodpecker"
  count            = 1 # optional
  timeout          = 90 # optional
```

## Upgrading

<details>

<summary>To 3.0.0</summary>

See the [3.0.0 release notes](https://woodpecker-ci.org/migrations#300).

</details>

<details>

<summary>To 1.0.0</summary>

- split `metrics.enabled` and the PodMonitor deployment to `prometheus.podmonitor.enabled`
- move `metrics.interval` to `prometheus.podmonitor.interval`

</details>

## Requirements

| Repository | Name   | Version |
| ---------- | ------ | ------- |
|            | agent  | 2.0.1   |
|            | server | 3.0.1   |

## Values

| Key                                                  | Type   | Default                                                                                                                                                                                          | Description                                                                                                                                                                                                                                                                                                                              |
| ---------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| agent.affinity                                       | object | `{}`                                                                                                                                                                                             | Specifies the affinity                                                                                                                                                                                                                                                                                                                   |
| agent.dnsConfig                                      | object | `{}`                                                                                                                                                                                             | Overrides the default DNS configuration                                                                                                                                                                                                                                                                                                  |
| agent.enabled                                        | bool   | `true`                                                                                                                                                                                           | Enable the agent component                                                                                                                                                                                                                                                                                                               |
| agent.env.WOODPECKER_BACKEND                         | string | `"kubernetes"`                                                                                                                                                                                   |                                                                                                                                                                                                                                                                                                                                          |
| agent.env.WOODPECKER_BACKEND_K8S_NAMESPACE           | string | `"woodpecker"`                                                                                                                                                                                   |                                                                                                                                                                                                                                                                                                                                          |
| agent.env.WOODPECKER_BACKEND_K8S_POD_ANNOTATIONS     | string | `""`                                                                                                                                                                                             |                                                                                                                                                                                                                                                                                                                                          |
| agent.env.WOODPECKER_BACKEND_K8S_POD_LABELS          | string | `""`                                                                                                                                                                                             |                                                                                                                                                                                                                                                                                                                                          |
| agent.env.WOODPECKER_BACKEND_K8S_STORAGE_CLASS       | string | `""`                                                                                                                                                                                             |                                                                                                                                                                                                                                                                                                                                          |
| agent.env.WOODPECKER_BACKEND_K8S_STORAGE_RWX         | bool   | `true`                                                                                                                                                                                           |                                                                                                                                                                                                                                                                                                                                          |
| agent.env.WOODPECKER_BACKEND_K8S_VOLUME_SIZE         | string | `"10G"`                                                                                                                                                                                          |                                                                                                                                                                                                                                                                                                                                          |
| agent.env.WOODPECKER_CONNECT_RETRY_COUNT             | string | `"1"`                                                                                                                                                                                            |                                                                                                                                                                                                                                                                                                                                          |
| agent.env.WOODPECKER_SERVER                          | string | `"woodpecker-server:9000"`                                                                                                                                                                       | Add the environment variables for the agent component                                                                                                                                                                                                                                                                                    |
| agent.extraSecretNamesForEnvFrom                     | list   | `[]`                                                                                                                                                                                             | Add extra secret that is contains environment variables                                                                                                                                                                                                                                                                                  |
| agent.extraVolumeMounts                              | list   | `[]`                                                                                                                                                                                             | Additional volumes that will be attached to the agent container                                                                                                                                                                                                                                                                          |
| agent.extraVolumes                                   | list   | `[]`                                                                                                                                                                                             | Additional volumes that can be mounted in containers                                                                                                                                                                                                                                                                                     |
| agent.fullnameOverride                               | string | `""`                                                                                                                                                                                             | Overrides the full name of the chart of the agent component                                                                                                                                                                                                                                                                              |
| agent.image.pullPolicy                               | string | `"IfNotPresent"`                                                                                                                                                                                 | The pull policy for the image                                                                                                                                                                                                                                                                                                            |
| agent.image.registry                                 | string | `"docker.io"`                                                                                                                                                                                    | The image registry                                                                                                                                                                                                                                                                                                                       |
| agent.image.repository                               | string | `"woodpeckerci/woodpecker-agent"`                                                                                                                                                                | The image repository                                                                                                                                                                                                                                                                                                                     |
| agent.image.tag                                      | string | `""`                                                                                                                                                                                             | Overrides the image tag whose default is the chart appVersion.                                                                                                                                                                                                                                                                           |
| agent.imagePullSecrets                               | list   | `[]`                                                                                                                                                                                             | The image pull secrets                                                                                                                                                                                                                                                                                                                   |
| agent.nameOverride                                   | string | `""`                                                                                                                                                                                             | Overrides the name of the chart of the agent component                                                                                                                                                                                                                                                                                   |
| agent.nodeSelector                                   | object | `{}`                                                                                                                                                                                             | Specifies the labels of the nodes that the agent component must be running                                                                                                                                                                                                                                                               |
| agent.persistence.accessModes                        | list   | `["ReadWriteOnce"]`                                                                                                                                                                              | Defines the access mode of the persistent volume                                                                                                                                                                                                                                                                                         |
| agent.persistence.enabled                            | bool   | `true`                                                                                                                                                                                           | Enable the creation of the persistent volume                                                                                                                                                                                                                                                                                             |
| agent.persistence.existingClaim                      | string | `nil`                                                                                                                                                                                            | Defines an existing claim to use                                                                                                                                                                                                                                                                                                         |
| agent.persistence.mountPath                          | string | `"/etc/woodpecker"`                                                                                                                                                                              | Defines the path where the volume should be mounted                                                                                                                                                                                                                                                                                      |
| agent.persistence.size                               | string | `"1Gi"`                                                                                                                                                                                          | Defines the size of the persistent volume                                                                                                                                                                                                                                                                                                |
| agent.persistence.storageClass                       | string | `""`                                                                                                                                                                                             | Defines the storageClass of the persistent volume                                                                                                                                                                                                                                                                                        |
| agent.podAnnotations                                 | object | `{}`                                                                                                                                                                                             | Add pod annotations for the agent component                                                                                                                                                                                                                                                                                              |
| agent.podSecurityContext                             | object | `{}`                                                                                                                                                                                             | Add pod security context                                                                                                                                                                                                                                                                                                                 |
| agent.replicaCount                                   | int    | `2`                                                                                                                                                                                              | The number of replicas for the deployment                                                                                                                                                                                                                                                                                                |
| agent.resources                                      | object | `{}`                                                                                                                                                                                             | Specifies the resources for the agent component                                                                                                                                                                                                                                                                                          |
| agent.securityContext                                | object | `{}`                                                                                                                                                                                             | Add security context                                                                                                                                                                                                                                                                                                                     |
| agent.serviceAccount.annotations                     | object | `{}`                                                                                                                                                                                             | Annotations to add to the service account                                                                                                                                                                                                                                                                                                |
| agent.serviceAccount.create                          | bool   | `true`                                                                                                                                                                                           | Specifies whether a service account should be created (also see RBAC subsection)                                                                                                                                                                                                                                                         |
| agent.serviceAccount.name                            | string | `""`                                                                                                                                                                                             | The name of the service account to use. If not set and create is true, a name is generated using the fullname template                                                                                                                                                                                                                   |
| agent.serviceAccount.rbac.create                     | bool   | `true`                                                                                                                                                                                           | If your cluster has RBAC enabled and you're using the Kubernetes agent- backend you'll need this. (this is true for almost all production clusters) only change this if you have a non CNCF compliant cluster, missing the RBAC endpoints the Role and RoleBinding are only created if serviceAccount.create is also true                |
| agent.serviceAccount.rbac.role.annotations           | object | `{}`                                                                                                                                                                                             |                                                                                                                                                                                                                                                                                                                                          |
| agent.serviceAccount.rbac.role.labels                | object | `{}`                                                                                                                                                                                             |                                                                                                                                                                                                                                                                                                                                          |
| agent.serviceAccount.rbac.roleBinding.annotations    | object | `{}`                                                                                                                                                                                             |                                                                                                                                                                                                                                                                                                                                          |
| agent.serviceAccount.rbac.roleBinding.labels         | object | `{}`                                                                                                                                                                                             |                                                                                                                                                                                                                                                                                                                                          |
| agent.tolerations                                    | list   | `[]`                                                                                                                                                                                             | Specifies the tolerations                                                                                                                                                                                                                                                                                                                |
| agent.topologySpreadConstraints                      | list   | `[]`                                                                                                                                                                                             | Using topology spread constraints, you can ensure that there is at least one agent pod for each topology zone, e.g. one per arch for multi-architecture clusters or one for each region for geographically distributed cloud-hosted clusters. Ref: <https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/> |
| fullnameOverride                                     | string | `""`                                                                                                                                                                                             | Overrides the full name of the chart                                                                                                                                                                                                                                                                                                     |
| nameOverride                                         | string | `""`                                                                                                                                                                                             | Overrides the name of the chart                                                                                                                                                                                                                                                                                                          |
| server.affinity                                      | object | `{}`                                                                                                                                                                                             | Add affinity                                                                                                                                                                                                                                                                                                                             |
| server.createAgentSecret                             | bool   | `true`                                                                                                                                                                                           |                                                                                                                                                                                                                                                                                                                                          |
| server.dnsConfig                                     | object | `{}`                                                                                                                                                                                             | Overrides the default DNS configuration                                                                                                                                                                                                                                                                                                  |
| server.enabled                                       | bool   | `true`                                                                                                                                                                                           | Enable the server component                                                                                                                                                                                                                                                                                                              |
| server.env                                           | object | `{"WOODPECKER_ADMIN":"woodpecker,admin","WOODPECKER_HOST":"https://xxxxxxx"}`                                                                                                                    | Add environment variables for the server component                                                                                                                                                                                                                                                                                       |
| server.extraSecretNamesForEnvFrom                    | list   | `[]`                                                                                                                                                                                             | Add extra environment variables from the secrets list                                                                                                                                                                                                                                                                                    |
| server.extraVolumeMounts                             | list   | `[]`                                                                                                                                                                                             | Additional volumes that will be attached to the agent container                                                                                                                                                                                                                                                                          |
| server.extraVolumes                                  | list   | `[]`                                                                                                                                                                                             | Additional volumes that can be mounted in containers                                                                                                                                                                                                                                                                                     |
| server.fullnameOverride                              | string | `""`                                                                                                                                                                                             | Overrides the full name of the helm chart of the server component                                                                                                                                                                                                                                                                        |
| server.image.pullPolicy                              | string | `"IfNotPresent"`                                                                                                                                                                                 | The image pull policy                                                                                                                                                                                                                                                                                                                    |
| server.image.registry                                | string | `"docker.io"`                                                                                                                                                                                    | The image registry                                                                                                                                                                                                                                                                                                                       |
| server.image.repository                              | string | `"woodpeckerci/woodpecker-server"`                                                                                                                                                               | The image repository                                                                                                                                                                                                                                                                                                                     |
| server.image.tag                                     | string | `""`                                                                                                                                                                                             | Overrides the image tag whose default is the chart appVersion.                                                                                                                                                                                                                                                                           |
| server.imagePullSecrets                              | list   | `[]`                                                                                                                                                                                             | The image pull secrets                                                                                                                                                                                                                                                                                                                   |
| server.ingress.annotations                           | string | `nil`                                                                                                                                                                                            | Add annotations to the ingress                                                                                                                                                                                                                                                                                                           |
| server.ingress.enabled                               | bool   | `false`                                                                                                                                                                                          | Enable the ingress for the server component                                                                                                                                                                                                                                                                                              |
| server.ingress.hosts[0].host                         | string | `"chart-example.local"`                                                                                                                                                                          |                                                                                                                                                                                                                                                                                                                                          |
| server.ingress.hosts[0].paths[0].backend.serviceName | string | `"chart-example.local"`                                                                                                                                                                          |                                                                                                                                                                                                                                                                                                                                          |
| server.ingress.hosts[0].paths[0].backend.servicePort | int    | `80`                                                                                                                                                                                             |                                                                                                                                                                                                                                                                                                                                          |
| server.ingress.hosts[0].paths[0].path                | string | `"/"`                                                                                                                                                                                            |                                                                                                                                                                                                                                                                                                                                          |
| server.ingress.ingressClassName                      | string | `""`                                                                                                                                                                                             | Defines which ingress controller will implement the resource                                                                                                                                                                                                                                                                             |
| server.ingress.tls                                   | list   | `[]`                                                                                                                                                                                             |                                                                                                                                                                                                                                                                                                                                          |
| server.initContainers                                | list   | `[]`                                                                                                                                                                                             | Add additional init containers to the pod (evaluated as a template)                                                                                                                                                                                                                                                                      |
| server.nameOverride                                  | string | `""`                                                                                                                                                                                             | Overrides the name of the helm chart of the server component                                                                                                                                                                                                                                                                             |
| server.nodeSelector                                  | object | `{}`                                                                                                                                                                                             | Defines the labels of the node where the server component must be running                                                                                                                                                                                                                                                                |
| server.persistentVolume.enabled                      | bool   | `true`                                                                                                                                                                                           | Enable the creation of the persistent volume                                                                                                                                                                                                                                                                                             |
| server.persistentVolume.mountPath                    | string | `"/var/lib/woodpecker"`                                                                                                                                                                          | Defines the path where the volume should be mounted                                                                                                                                                                                                                                                                                      |
| server.persistentVolume.size                         | string | `"10Gi"`                                                                                                                                                                                         | Defines the size of the persistent volume                                                                                                                                                                                                                                                                                                |
| server.persistentVolume.storageClass                 | string | `""`                                                                                                                                                                                             | Defines the storageClass of the persistent volume                                                                                                                                                                                                                                                                                        |
| server.podAnnotations                                | object | `{}`                                                                                                                                                                                             | Add pod annotations                                                                                                                                                                                                                                                                                                                      |
| server.podSecurityContext                            | object | `{}`                                                                                                                                                                                             | Add pod security context                                                                                                                                                                                                                                                                                                                 |
| server.probes                                        | object | `{"liveness":{"failureThreshold":3,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":10},"readiness":{"failureThreshold":3,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}}` | Configure probe options for container health checking                                                                                                                                                                                                                                                                                    |
| server.probes.liveness                               | object | `{"failureThreshold":3,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}`                                                                                                             | Configure liveness probe options                                                                                                                                                                                                                                                                                                         |
| server.probes.liveness.failureThreshold              | int    | `3`                                                                                                                                                                                              | When a probe fails, Kubernetes will try failureThreshold times before giving up (default: 3)                                                                                                                                                                                                                                             |
| server.probes.liveness.periodSeconds                 | int    | `10`                                                                                                                                                                                             | How often (in seconds) to perform the probe (default: 10)                                                                                                                                                                                                                                                                                |
| server.probes.liveness.successThreshold              | int    | `1`                                                                                                                                                                                              | Minimum consecutive successes for the probe to be considered successful after having failed (default: 1)                                                                                                                                                                                                                                 |
| server.probes.liveness.timeoutSeconds                | int    | `10`                                                                                                                                                                                             | Number of seconds after which the probe times out (default: 10)                                                                                                                                                                                                                                                                          |
| server.probes.readiness                              | object | `{"failureThreshold":3,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}`                                                                                                             | Configure readiness probe options                                                                                                                                                                                                                                                                                                        |
| server.probes.readiness.failureThreshold             | int    | `3`                                                                                                                                                                                              | When a probe fails, Kubernetes will try failureThreshold times before giving up (default: 3)                                                                                                                                                                                                                                             |
| server.probes.readiness.periodSeconds                | int    | `10`                                                                                                                                                                                             | How often (in seconds) to perform the probe (default: 10)                                                                                                                                                                                                                                                                                |
| server.probes.readiness.successThreshold             | int    | `1`                                                                                                                                                                                              | Minimum consecutive successes for the probe to be considered successful after having failed (default: 1)                                                                                                                                                                                                                                 |
| server.probes.readiness.timeoutSeconds               | int    | `10`                                                                                                                                                                                             | Number of seconds after which the probe times out (default: 10)                                                                                                                                                                                                                                                                          |
| server.resources                                     | object | `{}`                                                                                                                                                                                             | Specifies the ressources for the server component                                                                                                                                                                                                                                                                                        |
| server.secrets                                       | list   | `[]`                                                                                                                                                                                             | Create a generic secret to store things in, e.g. env values                                                                                                                                                                                                                                                                              |
| server.securityContext                               | object | `{}`                                                                                                                                                                                             | Add security context                                                                                                                                                                                                                                                                                                                     |
| server.service.clusterIP                             | string | `nil`                                                                                                                                                                                            | The cluster IP of the service (optional)                                                                                                                                                                                                                                                                                                 |
| server.service.loadBalancerIP                        | string | `nil`                                                                                                                                                                                            | The loadbalancer IP of the service (optional)                                                                                                                                                                                                                                                                                            |
| server.service.port                                  | int    | `80`                                                                                                                                                                                             | The port of the service                                                                                                                                                                                                                                                                                                                  |
| server.service.type                                  | string | `"ClusterIP"`                                                                                                                                                                                    | The type of the service                                                                                                                                                                                                                                                                                                                  |
| server.serviceAccount.annotations                    | object | `{}`                                                                                                                                                                                             | Annotations to add to the service account                                                                                                                                                                                                                                                                                                |
| server.serviceAccount.create                         | bool   | `false`                                                                                                                                                                                          | Specifies whether a service account should be created                                                                                                                                                                                                                                                                                    |
| server.serviceAccount.name                           | string | `""`                                                                                                                                                                                             | The name of the service account to use. If not set and create is true, a name is generated using the fullname template                                                                                                                                                                                                                   |
| server.statefulSet.annotations                       | object | `{}`                                                                                                                                                                                             | Add annotations to the StatefulSet                                                                                                                                                                                                                                                                                                       |
| server.statefulSet.labels                            | object | `{}`                                                                                                                                                                                             | Add labels to the StatefulSet                                                                                                                                                                                                                                                                                                            |
| server.statefulSet.replicaCount                      | int    | `1`                                                                                                                                                                                              | Defines the number of replicas                                                                                                                                                                                                                                                                                                           |
| server.statefulSet.revisionHistoryLimit              | int    | `5`                                                                                                                                                                                              | The maximum number of revisions that will be maintained in the StatefulSet's revision history Default in 10.                                                                                                                                                                                                                             |
| server.tolerations                                   | list   | `[]`                                                                                                                                                                                             | Add tolerations rules                                                                                                                                                                                                                                                                                                                    |
| server.updateStrategy.type                           | string | `"RollingUpdate"`                                                                                                                                                                                | Defines the update strategy of the StatefulSet                                                                                                                                                                                                                                                                                           |
