pipe-cd / pipecd

The One CD for All {applications, platforms, operations}
https://pipecd.dev
Apache License 2.0
1.05k stars 147 forks source link

Support CronJob as PipeCD managed workload #4956

Open Warashi opened 2 months ago

Warashi commented 2 months ago

What would you like to be added:

Support StatefulSet, CronJob, ...etc, as a workload in Kubernetes PipelineSync.

A document states that PipeCD supports Deployment as the only supported workload in the Kubernetes platform. https://pipecd.dev/docs-v0.47.x/user-guide/configuration-reference/#kubernetesworkload

I tried to specify StatefulSet as a workload, and its deployment was planned as PipelineSync. So, StatefulSet seems supported. So, the document seems wrong, or I missed some unsupported features.

Conversely, when I tried to specify CronJob as a workload, its deployment was planned as QuickSync. So, CronJob seems not supported.

This comes from the line below. CronJob's container spec is spec.jobTemplate.spec.template, not spec.template. https://github.com/pipe-cd/pipecd/blob/b20163b70902d4f0f6698ff85f8ac427d61359f8/pkg/app/piped/planner/kubernetes/kubernetes.go#L260

Why is this needed:

We want to use WAIT_APPROVAL stage with these workloads.

khanhtc1202 commented 2 months ago

Thanks @Warashi ! As mentioned in the docs, we want to support ReplicationController, DaemonSet, and StatefulSet in our plan. There is currently no CronJob on the list. Could you confirm the behavior of the current piped with the above planned Kind? If it all worked, then we can rename this issue as support CronJob as PipeCD managed workload ref: https://pipecd.dev/docs-v0.47.x/user-guide/configuration-reference/#kubernetesworkload

Warashi commented 2 months ago

I checked the behavior of ReplicationController, DaemonSet, and StatefulSet. When I changed the image tags of these kinds of manifests, the sync strategy became PipelineSync. However, I only checked the WAIT_APPROVAL stage and K8S_PRIMARY_ROLLOUT stage with example manifests in Kubernetes' official documents. In perfect, I should check the behaviors of all stages, but I think it's enough to determine if PipelineSync is supported.