GitOps Deployment
* [Considerations](#considerations)
* [ArgoCD](#argocd)
* [Option 1: Use YAML manifests](#option-1-use-yaml-manifests)
* [Option 2: Helmfile plugin](#option-2-helmfile-plugin)
The recommended deployment method for openDesk is via Helmfile. This can be done "by hand", via CI/CD (Gitlab) or using
the [GitOps](https://about.gitlab.com/topics/gitops/) approach with tools like [Argo CD](https://argoproj.github.io/cd/).
This documentation will use Argo CD to explain how to deploy openDesk GitOps-style.
# Considerations
- openDesk consists of multiple applications which have to be deployed in order.
- During upgrades, migrations have to run before and after applications.
# ArgoCD
We are continuously improving our Argo CD support, please share you experience with Argo CD deployments e.g. by [creating
a ticket](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/issues).
There are two options to deploy openDesk via Argo CD described in the following sections.
## Option 1: Use YAML manifests
This option requires a preprocessing step before using Argo CD. This step requires you to compile the Helmfile based
deployment into Kubernetes YAML manifest, to do so you need to execute the helmfile binary:
```shell
helmfile template > opendesk.yaml
```
References:
- [Helmfile CLI documentation](https://helmfile.readthedocs.io/en/latest/#cli-reference)
- [Generate K8s YAML Manifests for openDesk](https://gitlab.opencode.de/bmi/opendesk/deployment/options/generate-k8s-yaml-manifests)
Afterwards, you can use the resulting manifests within a standard Argo CD workflow.
> **Note**
> When creating the Argo CD application based on the resulting manifests, you must not use the `Automated Sync Policy`
> offered by Argo CD, as you have to manually ensure the applications are updated in the required sequence.
## Option 2: Helmfile plugin
It is possible to deploy openDesk via Argo CD with the community developed
[Helmfile plugin](https://github.com/travisghansen/argo-cd-helmfile).
You can find an example for this approach in the
[Argo CD Deployments](https://gitlab.opencode.de/bmi/opendesk/deployment/options/argocd-deploy) repository.
It contains an example Helm chart (`opendesk-parent`) to create Argo CD Applications via a Helm chart (`opendesk`)
according to `app of apps pattern`. It uses sync waves to ensure the deployment matches requirements and the update sequence
for openDesk is satisfied.