> For the complete documentation index, see [llms.txt](https://docs.skail.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.skail.dev/operar/readme.md).

# Ambientes e promoção

Como organizar dev, homologação e produção no skail, o que muda entre eles, e como promover o mesmo build de um para o outro trocando só variáveis.

## Quando você precisa disto

Ao sair do quickstart para um fluxo real: antes do primeiro deploy em homologação.

## O modelo

Um environment por estágio, dentro do projeto: `dev`, `hml`, `prod` (os nomes são livres). Cada um tem a própria chave, o próprio namespace e a própria URL base, e isola execuções, histórico e eventos. O mesmo workload (`faturamento:v1.3.0`) é publicado nos três; o build é o mesmo, a configuração muda.

| O que muda por environment               | Onde fica                                                                                           |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------- |
| `SKAIL_NAMESPACE`                        | Configuração da aplicação (segredos do host)                                                        |
| `SKAIL_KEY`                              | Idem; segredo                                                                                       |
| `SKAIL_SIDECAR` e URL base da API        | Configuração da aplicação e do sistema que dispara, com os valores fornecidos para cada environment |
| Recursos externos (banco, APIs, gateway) | Configuração da aplicação, como sempre                                                              |

| O que não muda               | Por quê                                                                                     |
| ---------------------------- | ------------------------------------------------------------------------------------------- |
| O build da aplicação         | Promoção é troca de variáveis, não recompilação                                             |
| `SKAIL_WORKLOAD`             | O mesmo `nome:versao` em todos os environments; a versão identifica o código, não o estágio |
| Nomes de eventos e functions | São contrato do código                                                                      |

## Procedimento de promoção

1. Publique a versão em `hml` com o `SKAIL_WORKLOAD` da release (vindo da pipeline, igual à tag da imagem).
2. Aponte o sistema que dispara, em `hml`, para a URL base e o namespace de `hml`, e rode os fluxos de validação. Acompanhe no Monitor de `hml`.
3. Crie o workload com a mesma versão em `prod` e publique a mesma imagem com as variáveis de `prod`. Se já existe uma versão anterior rodando em `prod` com fluxo diferente, siga [Deploy sem quebrar execuções em andamento](/operar/deploy-sem-quebrar-execucoes-em-andamento.md).
4. Aponte os triggers de produção para a nova versão.

## Desenvolvedores em dev

Dois desenvolvedores com o mesmo `SKAIL_WORKLOAD` apontando para o mesmo environment disputam as mesmas execuções. Use um environment por pessoa, ou um nome de workload por pessoa (`faturamento-maria:v0.0.1`) no `dev` compartilhado. Ver [Como rodar localmente](/construir/configurar-e-hospedar/como-rodar-localmente.md).

## O que observar no Monitor

Depois de promover, a primeira execução em cada environment: ela confirma namespace, chave, workload e URL base de uma vez. Se ela não aparece, ou aparece mas fica Na fila, é uma dessas configurações; ver [Troubleshooting](/operar/troubleshooting.md).

## Se der errado

Chave de um environment em outro: 401/403 no trigger ou `Unauthenticated` no runtime; corrija a variável. Trigger aceito mas a execução não aparece no Monitor: o sistema que disparou usou o namespace de outro environment; procure a execução lá. Execução aparece no Monitor mas não avança (Na fila): `SKAIL_WORKLOAD` do processo diferente do `nome:versao` usado no caminho do trigger.

## Próximos passos

[Chaves: criar, rotacionar, revogar](/operar/chaves-criar-rotacionar-revogar.md), [Como hospedar](/construir/configurar-e-hospedar/como-hospedar-worker-service-asp.net-core-container-kubernetes-azure.md), [Environments](/construir/portal/environments.md).
