Skip to main content

Tipos de Workflow e Steps

Os tipos de Workflow definem a finalidade da sua execução. Cada tipo possui um comportamento específico durante e após a finalização das execuções dos seus Jobs.

Workflow do tipo create

O Workflow do tipo create executa a aplicação de Plugins para a criação de uma Aplicação ou Infraestrutura no Portal da StackSpot EDP. O uso está disponível tanto no STK CLI, quanto no Portal da plataforma StackSpot EDP, substituindo o starter na criação de Aplicações e Infraestruturas.

Workflow do tipo deploy

O Workflow do tipo deploy é executado após todos os Jobs terem sido concluídos dentro do escopo de deploy. Na StackSpot, esse escopo garante que todos os Plugins foram aplicados, as Actions executadas e os templates processados, gerando o código do aplicativo pronto para ser implantado.

Isso significa que, nesse modo, parâmetros como o ambiente (environment) são obrigatórios, e ações como Hooks Declarativos de Actions e Plugins já foram executadas e não serão disparadas novamente durante o deploy. O campo targets define o tipo de recurso que será implantado no deploy.

workflow.yaml
schema-version: v1
kind: workflow
metadata:
name: workflow-deploy
display-name: workflow-deploy
description: Workflow para deploy de Aplicações ou Infraestruturas.
version: 1.0.0
spec:
type: deploy
label: Workflow Title
targets:
- app
# - infra
docs:
en-us: docs/en_us/docs.md
pt-br: docs/pt_br/docs.md

Workflow do tipo reusable

O Workflow do tipo reusable executa Jobs genéricos. Sua principal característica é receber entradas (inputs) e gerar saídas (outputs), que podem ser usadas em outros Workflows. Isso torna o Workflow reutilizável em outros Workflows.

Exemplo:

workflow.yaml
schema-version: v1
kind: workflow
metadata:
name: reusable-workflow
display-name: reusable-workflow
description: Workflow genérico para reuso em outros Workflows.
version: 1.0.0
spec:
type: reusable
label: Workflow Title
docs:
en-us: docs/en_us/docs.md
pt-br: docs/pt_br/docs.md
inputs:
- type: text
name: text_input
label: "Type some text:"
computed-inputs:
computed_input_name: "{{ text_input | upper}}"
outputs:
uppercase_text_output: "{{ computed_input_name | encrypt }}"
Dica!

Os outputs do Workflow possuem o comportamento semelhante ao computed-inputs. Para saber mais como usar os Outputs do Workflow, confira o conteúdo dos computed-inputs.

Workflow do tipo rollback

O Workflow do tipo rollback executa Jobs para retornar a versão de uma Aplicação ou Infraestrutura implantados. O campo targets define o tipo de recurso que será feito o rollback.

workflow.yaml
schema-version: v1
kind: workflow
metadata:
name: rollback-workflow
display-name: rollback-workflow
description: Workflow para executar o rollback de Aplicações e Infraestruturas implantados.
version: 1.0.0
spec:
type: rollback
label: Workflow Title
targets:
- app
# - infra
docs:
en-us: docs/en_us/docs.md
pt-br: docs/pt_br/docs.md

Workflow do tipo starter

O Workflow do tipo starter executa a aplicação de Plugins para a criação de uma Aplicação ou Infraestrutura pelo STK CLI. Para criar uma Aplicação ou Infraestrutura com um Workflow pelo Portal da plataforma StackSpot EDP, use o tipo do tipo create.

O uso de Starters para criar Aplicações ou Infraestruturas ainda é possível, mas está depreciado. O campo targets define o tipo de recurso que será criado.

workflow.yaml
schema-version: v1
kind: workflow
metadata:
name: starter-workflow
display-name: starter-workflow
description: Workflow do tipo Starter para criar Aplicações ou Infraestruturas.
version: 0.0.1
spec:
type: starter
label: Workflow Title
targets:
- app
# - infra
docs:
en-us: docs/en_us/docs.md
pt-br: docs/pt_br/docs.md

Step do tipo plugin

O Step do tipo plugin executa a aplicação de Plugins pelo em um Job do seu Workflow. Este Step permite que você defina todos os valores que devem ser obtidos pelo Workflow e utilizados durante a aplicação dos Plugins.

Exemplo:

steps:
- type: plugin
name: nome-estudio/optional_plugin@1
id: apply_optional_plugin
label: Apply optional plugin
when: "{{ boolean_input }}"
inputs:
some_plugin_input: "fixed_value"
other_plugin_input: "{{ text_input | lower }}"
input_from_other_job: "{{ outputs.some_job.some_action_execution.some_action_output }}"
  • type: tipo do Step.
  • name: nome do Plugin que vai ser aplicado pelo Step. Use o formato: nome-estudio/nome-plugin@1.0.0(versão semântica).
Atenção!

O campo name sempre usa o Studio Qualifier do Plugin. Isto permite que ele seja aplicado dentro ou fora de um Workspace. Saiba mais detalhes sobre o Studio Qualifier de Plugins.

  • id: id identificador do Step.

  • label: nome exibido na tela de Atividades no log do Workflow.

  • when: (Opcional) parâmetro para usar um valor booleano como condicional para execução do Job ou Step.

  • inputs: preenchimento dos inputs dos Plugins definidos no Workflow. A sintaxe para preenchê-los é:

    • nome_do_input: "valor_do_input"

Exemplo:

inputs:
some_plugin_input: "fixed_value"
other_plugin_input: "{{ text_input | lower }}"
input_from_other_job: "{{ outputs.some_job.some_action_execution.some_action_output }}"

Step do tipo action

O Step do tipo action executa uma Action em um Job do seu Workflow. Este Step permite que você defina todos os valores que devem ser obtidos pelo Workflow e utilizados durante a execução da Action.

Exemplo:

steps:
- id: action_example
label: Example of step run action
name: nome-estudio/nome-da-action@1.0.0
type: action
inputs:
input_1: "This is a example of fixed input"
  • id: id identificador do Step.

  • label: nome exibido na tela de Atividades no log do Workflow.

  • name: nome da Action que o Step vai executar. Use o formato: nome-estudio/nome-action@1.0.0(versão semântica).

  • type: o tipo do Step.

  • inputs: preenchimento dos inputs da Action definidos no Workflow. A sintaxe para preenchê-los é:

    • nome_do_input: "valor_do_input".

Step do tipo suspend

O Step do tipo suspend pausa a execução do Workflow até que alguém aprove para o Workflow continuar. Sempre que a execução de um Workflow é pausada pelo Step do tipo suspend, o responsável pela conta ou Workspace da sua Organização deve aprovar a continuação da execução do Workflow.

Outra forma de continuar a execução de um Workflow suspenso, é executar o comando stk resume workflow em execuções locais ou em etapas pré-configuradas em uma pipeline.

steps:
- id: example_suspend
label: Example of step suspend
type: suspend
  • id: id identificador do Step.
  • label: nome exibido na tela de Atividades no log do Workflow.
  • type: tipo do Step.

Step do tipo run

O Step do tipo run executa comandos Shell arbitrários.

O comando no parâmetro script faz a compactação dos arquivos em um arquivo tar.gz
steps:
- id: step_id_1
label: Step which say hello
type: run
script: |
tar -czvf archive.tar.gz file1 file2
  • id: id identificador do Step.
  • label: nome exibido na tela de Atividades no log do Workflow.
  • type: tipo do Step.
  • script: script Shell que vai ser executado pelo Step.

Step do tipo workflow

O Step do tipo workflow executa outro Workflow publicado em seu Estúdio.

steps:
- id: step_id_1
name: nome-studio/nome-workflow@1.0.0
type: workflow
inputs:
input_1: "This is a example of fixed input"
  • id: identificador do Step.
  • name: nome do Workflow que o Step vai executar. Use o formato: nome-estudio/nome-workflow@1.0.0(versão semântica).
Atenção!

O campo name sempre usa o Studio Qualifier do Workflow. Isto permite que ele seja executado dentro ou fora de um Workspace. Saiba mais detalhes sobre o Studio Qualifier de Plugins para executar outros Workflows.

  • type: tipo do Step.

  • inputs: preenchimento dos inputs do Workflow que vai ser executado. A sintaxe para preenchê-los é:

    • nome_do_input: "valor_do_input".

O uso do parâmetro label é opcional para o Step do tipo workflow.

Executar Steps com Strategy Loop

O Strategy Loop no Workflow da StackSpot permite executar um Step repetidamente para cada valor de uma lista fornecida. O Strategy Loop executa o mesmo Step para cada valor da lista, iterando sobre os elementos.

Durante a execução do Strategy Loop, duas variáveis são disponibilizadas automaticamente para uso no Step:

  • stk_loop_index: Representa a posição atual do elemento na lista.
  • stk_loop_value: Representa o valor atual do elemento na lista.

Essas variáveis podem ser utilizadas em diferentes partes do Step, como no campo script para personalizar a execução com base no valor atual da iteração.

Exemplo do trecho de um Workflow, demonstrando o uso do Strategy Loop.
jobs:
- id: job_id
label: Label do Job
steps:
- id: ID do Step
type: run # Step do tipo 'run'
label: label do step, imprime as variáveis {{stk_loop_index}} e {{stk_loop_value}}
strategy:
loop: input_list # input do tipo lista informado no 'strategy.loop' do Workflow
script: |
echo "Script de exemplo que imprime a posição e valor dos itens da lista informada: {{stk_loop_index}} e {{stk_loop_value}}"

Como funciona o Strategy Loop

  1. Definição da lista: A lista que o Strategy Loop recebe pode ser fornecida de duas formas:

Por Input: um input do tipo lista definido no Workflow.

Exemplo de input do tipo lista que recebe uma lista de strings de IPs.
inputs:
- label: Informe a lista de IPs
name: ips
type: list
add-question: Deseja adicionar mais IPs na lista?
input:
type: text
label: Endereço IP
Neste exemplo, a lista de IPs é fornecida como input do Workflow.
jobs: # Job do StackSpot Workflow
- id: processar_lista_ips
label: Processar IPs
steps: # Step que vai usar a lista 'ips'
- id: processo_ip
type: run
label: Processar IP {{stk_loop_index}} - {{stk_loop_value}}
strategy:
loop: ips # input do tipo lista definido no exemplo anterior
script: | # execução de um script que utiliza as variáveis do 'strategy.loop'
echo "IP processado no index {{stk_loop_index}}: {{stk_loop_value}}"
Dica!

O exemplo usa um input do tipo lista com inputs do tipo texto, mas você pode usar qualquer tipo de input suportado pelo input do tipo lista:

  • text;
  • int;
  • object;
  • required-connection.

Para mais detalhes sobre o input do tipo lista, confira a página de Inputs.

  1. Hardcoded: a lista é definida diretamente no campo strategy.loop do Workflow:
Exemplo de lista de string.
strategy:
loop:
- "192.168.0.1"
- "10.0.0.1"
- "172.16.0.1"
strategy:
loop: ["192.168.0.1", "10.0.0.1", "172.16.0.1"]