2 min read | by Jordi Prats
Given a specific Argo Workflow, you can convert it into a reusable Argo WorkflowTemplate. This allows you to reference the template across multiple workflows without repeating it's YAML definition.
We are going to use the Argo Workflow that we've used in a previous post to build and push container images using Kaniko. The yaml definition for the Argo WorkflowTemplate is as follows:
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
name: build-and-push-image
spec:
entrypoint: kaniko-build
volumes:
- name: kaniko-secret
secret:
secretName: dockerhub-registry
items:
- key: .dockerconfigjson
path: config.json
templates:
- name: kaniko-build
container:
image: gcr.io/kaniko-project/executor:latest
args:
- --dockerfile=Dockerfile
- --context=git://github.com/jordiprats/django-ampa.git#refs/heads/main
- --destination=jordiprats/ampa:kaniko
volumeMounts:
- name: kaniko-secret
mountPath: "/kaniko/.docker"
It's important to note the following key changes:
Workflow
to WorkflowTemplate
to make it reusable.generateName
has been replaced with name
, as workflow templates require a fixed name that we'll reference later on the workflows.$ kubectl apply -f kaniko-template.yaml
workflowtemplate.argoproj.io/build-and-push-image created
To create an actual Workflow from this template, you can reference it as follows:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: build-and-push-image-
spec:
workflowTemplateRef:
name: build-and-push-image
This way, you reuse the kaniko-build logic without needing to repeat it each time you need to run the same build. We can trigger the workflow as usual:
$ kubectl create -f kaniko-template-instance.yaml ; kubectl get workflow -w
workflow.argoproj.io/build-and-push-image-rvkkf created
NAME STATUS AGE MESSAGE
build-and-push-image-rvkkf Running 0s
build-and-push-image-rvkkf Running 10s
build-and-push-image-rvkkf Succeeded 58s
Posted on 25/10/2024