# 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**: ## Installation To install the latest release of the chart: ```sh # since > 1.6.1 helm install woodpecker oci://ghcr.io/woodpecker-ci/helm --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
To 3.0.0 See the [3.0.0 release notes](https://woodpecker-ci.org/migrations#300).
To 1.0.0 - split `metrics.enabled` and the PodMonitor deployment to `prometheus.podmonitor.enabled` - move `metrics.interval` to `prometheus.podmonitor.interval`
## 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: | | 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 |