Skip to main content

Variáveis de ambiente

O MB CLI trabalha com dois conjuntos de variáveis de ambiente com finalidades diferentes:

TipoQuem define?Quando?Para quê?
Variáveis de controleVocê (usuário)Antes de executar o CLIControlar comportamento do MB CLI
Variáveis dos pluginsO CLIDurante execuçãoConfigurar ambiente dos plugins

1. Variáveis de Controle do CLI

Estas variáveis são definidas por você antes de executar o MB CLI para controlar seu comportamento.

Resumo

VariávelFinalidadeValoresDefault
MB_DISABLE_UPDATE_CHECKDesativar verificação de versão1, truenão definida
MB_PLUGIN_SUBDIRSubdiretório de pluginsnome do dirsrc
MB_ENVS_SECRET_STOREPreferência de secret storekeyring, 1passwordkeyring

MB_DISABLE_UPDATE_CHECK

Desativa a verificação automática de nova versão.

export MB_DISABLE_UPDATE_CHECK=1

Quando definida como 1 ou true (case-insensitive), o CLI não consulta a API do GitHub e não exibe warnings de nova versão.

MB_PLUGIN_SUBDIR

Define o subdiretório onde o MB CLI procura plugins ao instalar de um repositório Git.

# Usar subdiretório customizado
export MB_PLUGIN_SUBDIR=plugins

# Desativar detecção (plugins na raiz)
export MB_PLUGIN_SUBDIR=

Exemplo: Com MB_PLUGIN_SUBDIR=src (default), um repositório com estrutura repo/src/meu-plugin/ gera o comando mb meu-plugin (sem prefixo src).

MB_ENVS_SECRET_STORE

Define a preferência de secret store para mb envs.

export MB_ENVS_SECRET_STORE=1password

Determina onde as secrets são armazenadas por padrão ao usar mb envs set --secret:

  • keyring — usa o keyring do sistema (macOS Keychain, Linux Secret Service)
  • 1password — usa 1Password (requer op no PATH)

Nota: Estas variáveis controlam apenas o CLI. Para configurar variáveis que serão injetadas nos plugins, veja a seção Variáveis Configuráveis pelo Usuário.


2. Variáveis dos Plugins

Estas variáveis são definidas pelo CLI durante a execução de plugins ou mb run. Elas controlam o ambiente do processo filho — o ambiente do seu shell não é alterado.

Dividem-se em três categorias:

2.1 Variáveis de Contexto (Automáticas)

Injetadas automaticamente para plugins inspecionarem como foram invocados. São somente leitura.

VariávelConteúdoExemplo
MB_CTX_INVOCATIONString da invocação completa/bin/mb tools deploy -i
MB_CTX_CONFIG_DIRDiretório de configuração~/.config/mb
MB_CTX_COMMAND_PATHCaminho do comandotools/deploy
MB_CTX_COMMAND_NAMENome do comandodeploy
MB_CTX_PARENT_COMMAND_PATHCaminho do comando paitools
MB_CTX_COBR_COMMAND_PATHCaminho completo Cobramb tools deploy
MB_CTX_PLUGIN_FLAGSFlags do plugin que foram usadasinstall --force
MB_CTX_PEER_COMMANDSJSON de comandos peer (irmãos)["lint","test"]
MB_CTX_CHILD_COMMANDSJSON de comandos filhos visíveis["rollback","status"]
MB_CTX_CHILD_COMMAND_INFOJSON de {name,description} por filho visível (descrição = Cobra Short, ordenado por nome)[{"name":"vscode","description":"Instala…"}]
MB_CTX_HIDDEN_CHILD_COMMANDSJSON de comandos filhos ocultos["debug"]
MB_CTX_CHILD_COMMAND_ALIASESJSON de aliases de comandos filhos[{"command":"deploy","aliases":["d"]}]

Uso em scripts de plugin:

#!/bin/bash
# Adaptar comportamento baseado no contexto
echo "Executando: $MB_CTX_COMMAND_NAME"

# Iterar comandos peer
echo "$MB_CTX_PEER_COMMANDS" | jq -r '.[]'

# Verificar se flag foi usada
if echo "$MB_CTX_PLUGIN_FLAGS" | grep -q '\-\-force'; then
echo "Modo forçado ativado"
fi

Casos de uso:

  • Scripts adaptativos: comportamento muda baseado no comando ou flags
  • Descoberta dinâmica: listar comandos disponíveis no mesmo nível
  • Logging/auditoria: registrar como o plugin foi invocado
  • Helpers reutilizáveis: funções que funcionam em qualquer contexto

Referência técnica completa →

2.2 Variáveis de Comportamento

Injetadas pelo CLI para controlar execução de scripts:

VariávelQuando é injetadaFinalidade
MB_HELPERS_PATHSempreCaminho para shell helpers (lib/shell)
MB_QUIETCom --quietModo silencioso (suprimir output)
MB_VERBOSECom --verboseModo detalhado (logar mais)
GUM_*SempreTema de cores (laranja #FFA500, verde #00A86B)

MB_HELPERS_PATH:

#!/bin/bash
source "$MB_HELPERS_PATH/log.sh"
log info "Iniciando deploy"

MB_QUIET e MB_VERBOSE:

#!/bin/bash
# Output adaptativo
if [ "$MB_QUIET" != "1" ]; then
echo "Processando..."
fi

if [ "$MB_VERBOSE" = "1" ]; then
echo "Debug: $(env | sort)"
fi

2.3 Variáveis Configuráveis pelo Usuário

Estas são as variáveis que você pode configurar para injetar nos plugins. São mescladas de várias fontes com ordem de precedência (maior vence):

#CamadaQuando entraExemplo
1SistemaSempre — variáveis do shellPATH, HOME
2env.defaultsSempre — ficheiro base~/.config/mb/env.defaults
3Vault (--env-vault)Com --env-vault <nome>.env.staging no diretório de configuração
4mbcli.yamlenvsSempre — variáveis do projetoenvs.API_BASE no YAML
5.env no cwdQuando existe no diretório atual.env do projeto
6--env-fileCom --env-file <path>--env-file .env.prod
7env_files do manifestSó plugins — arquivos .env declaradosenv_files no manifest.yaml
8--env KEY=VALUESempre — maior precedência--env FOO=bar

Para definir, listar e remover variáveis, use mb envs. Referência completa →

Variáveis personalizadas dos plugins

Alguns plugins podem definir variáveis de ambiente específicas que são necessárias para seu funcionamento. Estas variáveis não são documentadas pelo CLI — cada plugin é responsável por documentar suas próprias dependências.

Para descobrir se um plugin precisa de variáveis personalizadas:

# Ver o README do plugin (se disponível)
mb <comando> --readme
mb <categoria> <comando> --readme

O --readme renderiza o arquivo de documentação do plugin (geralmente README.md), que deve listar:

  • Variáveis de ambiente necessárias
  • Valores esperados e exemplos
  • Se há valores padrão ou obrigatórios

Exemplo:

mb deploy production --readme

Se o plugin não tiver --readme disponível, consulte a documentação do autor do plugin no repositório de origem.

Exemplo de envs no mbcli.yaml

envs:
API_BASE: https://api.example.test
FEATURE_X: "1"
staging:
API_BASE: https://api.staging.example
  • API_BASE e FEATURE_X → vault de projeto project (sempre mesclados)
  • staging.API_BASE → vault de projeto project/staging (só com --env-vault staging)

Secrets

Keyring do sistema (--secret)

O valor fica no keyring (macOS Keychain, Linux Secret Service), não em ficheiro. Na listagem aparece como ***. Use mb envs list --show-secrets para ver.

mb envs set TOKEN=abc --secret # funciona, mas o MB avisa: valor na linha pode ir para o histórico da shell
# Evitar o valor no histórico da shell: só a chave + prompt mascarado (gum ou /dev/tty)
mb envs set TOKEN --secret

1Password (--secret-op)

O valor fica no cofre 1Password; a referência op:// é gravada em *.opsecrets. Requer op no PATH e sessão ativa.

mb envs set TOKEN=abc --secret-op
mb envs set TOKEN --secret-op
mb envs set TOKEN=abc --secret-op --vault staging # cofre específico

Em CI, use KEY=VALOR na linha de comandos (sem prompt) e, para --secret-op no vault padrão, adicione --yes para evitar o prompt de confirmação.

Vaults de projeto

O ficheiro mbcli.yaml na raiz do projeto pode definir variáveis sob a chave envs:

  • Escalares na raiz → vault lógico project (sempre mesclados)
  • Sub-mapas → vaults lógicos project/<nome> (só com --env-vault <nome>)

Diferente dos vaults em disco (.env.<nome> no diretório de configuração):

  • Não suportam secrets (sem keyring, sem op://) — só valores em claro
  • São versionados no repositório
  • O nome project e prefixo project/ são reservados

Para listar vaults de projeto:

mb envs vaults # mostra project, project/staging, etc.
mb envs list --vault project # só a raiz de envs no YAML
mb envs list --vault project/staging # só o sub-mapa staging

Quando usar o quê

CenárioRecomendação
Variável usada em todos os projetosmb envs set (env.defaults)
Variável por ambiente (staging, prod)Vault: mb envs set --vault staging + --env-vault staging
Variável compartilhada pela equipeenvs no mbcli.yaml (versionado)
Secret (tokens, senhas)mb envs set --secret (keyring) ou --secret-op (1Password)
Override rápido numa execução--env KEY=VALUE
Arquivo .env de projeto.env no cwd ou --env-file

mb run

Execute qualquer programa com o mesmo ambiente mesclado dos plugins:

mb run python script.py
mb run --env-vault staging -e FOO=bar uv sync

Flags podem ir antes ou depois de run, sempre antes do executável. Depois de --, nada é interpretado como flag do MB.

Ver também