2025-04-30 15:02:30 +03:00

177 lines
63 KiB
Markdown

# 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 |