Saltar a contenido

DAG

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: ejecucion-ballena-
  namespace: argocd
spec:
  entrypoint: orquestador-grafo

  templates:
  # El Director de Orquesta versión GAFO/DAG
  - name: orquestador-grafo
    dag:
      tasks:
      - name: tarea-clonar
        template: clonar-codigo  # No tiene dependencias, arranca de primero.

      - name: tarea-test
        template: ejecutar-tests
        dependencies: [tarea-clonar] # Espera a que termine la clonación.

      - name: tarea-sonar
        template: analizar-codigo
        dependencies: [tarea-clonar] # También espera a clonar, corre en paralelo con test.

      - name: tarea-construir
        template: construir-imagen
        dependencies: [tarea-test, tarea-sonar] # ¡Espera a que AMBOS pasen con éxito!

  - name: clonar-codigo
    container:
      image: argoproj/argosay:v2
      command: [cowsay]
      args: ["clonar-codigo"]

  - name: ejecutar-tests
    container:
      image: argoproj/argosay:v2
      command: [cowsay]
      args: ["ejecutar-tests"]

  - name: analizar-codigo
    container:
      image: argoproj/argosay:v2
      command: [cowsay]
      args: ["analizar-codigo"]

  - name: construir-imagen
    container:
      image: argoproj/argosay:v2
      command: [cowsay]
      args: ["construir-imagen"]

Fail Fast

[!IMPORTANT] By default, DAGs fail fast: when one task fails, no new tasks will be scheduled. Once all running tasks are completed, the DAG will be marked as failed.

If failFast is set to false for a DAG, all branches will run to completion, regardless of failures in other branches.

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: ejecucion-ballena-
  namespace: argocd
spec:
  entrypoint: orquestador-grafo
  templates:
  # 1. El orquestador que solo define el Grafo (DAG) y las dependencias
  - name: orquestador-grafo
    dag:
      failFast: true # Valor por defecto
      tasks:
      - name: tarea-clonar
        template: template-clonar  # Llama al template del contenedor

      - name: tarea-test
        template: template-test    # Llama al template del contenedor

  # 2. Plantilla independiente para la tarea de clonar (sleep)
  - name: template-clonar
    container:
      image: busybox
      command: [sh, -c]
      args: ["sleep 300"]

  # 3. Plantilla independiente para la tarea de test (error)
  - name: template-test
    container:
      image: busybox
      command: [sh, -c]
      args: ["echo intentional failure; exit 1"]