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.
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:
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 }}"
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.
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.
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)
.
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.
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)
.
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 tipoworkflow
.
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.
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
- 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.
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
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}}"
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.
- Hardcoded: a lista é definida diretamente no campo
strategy.loop
do Workflow:
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"]