Segredos no GitHub Actions com o Crunu e OIDC
Rode os passos do GitHub Actions com as variáveis de um ambiente do Crunu. O token recebe só o que você concede, e o OIDC o prende a um repositório e um branch.
- Compatibilidade
- Funciona com o Crunu hoje: o suporte a GitHub Actions faz parte do produto.
- Recursos do Crunu
- CI/CD e Máquinas
- Conferido
- Com o Crunu 6.0.0 em 27 de outubro de 2026
Recursos do Crunu que funcionam com GitHub Actions
Cada recurso abaixo funciona do mesmo jeito em todas as integrações: o servidor guarda texto cifrado, e só as pessoas, máquinas e tokens que você autorizar conseguem descriptografar.
CI/CD
Dê a cada pipeline um token de serviço limitado aos ambientes dele e vincule-o ao seu provedor de CI com OIDC, para que um token vazado não consiga entrar sozinho.
Saiba mais
Máquinas
Registre um servidor com um código de uso único, e o agente crunu mantém os ambientes dele em memória e inicia os seus programas com eles.
Saiba mais
Como funciona com GitHub Actions
Nesta página
O que o Crunu faz no GitHub Actions
Um passo do workflow executa o seu comando por meio do crunu run. O agente crunu entra com um token de serviço, confere as assinaturas de tudo o que o servidor envia, descriptografa as variáveis na própria memória e inicia o comando com elas. Nada é gravado no disco.
crunu run --env web-app/staging -- npm testO token recebe só os ambientes que você concede a ele. Com um vínculo de CI (OIDC), ele também precisa de um token novo do GitHub para o repositório, o branch e o ambiente de deploy que você definir, então um CRUNU_TOKEN vazado não consegue entrar sozinho. O próprio crunu pede esse token ao GitHub, e o servidor rejeita um que já tenha sido usado.
Configuração
- No Crunu, abra Service tokens e escolha New service token. Dê um nome como
github-actions-web-app, concedaweb-app / staginge mantenha a concessão padrão de 30 dias. O token deixa de funcionar se nenhuma execução o usar por mais tempo que a concessão, e cada execução a prolonga. - O token só é mostrado uma vez. Guarde-o na mesma hora como o segredo de repositório
CRUNU_TOKEN. - Copie os valores do bloco CI setup da página do token para variáveis de repositório:
CRUNU_SERVER,CRUNU_VERSION,CRUNU_INSTALL_URL,CRUNU_INSTALL_SHA256eCRUNU_BINARY_SHA256. Eles vêm do manifesto de release assinado. Na nuvem,CRUNU_SERVERéhttps://app.crunu.com. - Opcional: adicione um vínculo de CI (OIDC) na página do token. Escolha o provedor GitHub e defina
repository,refe, para um token de production,environment.
Exemplo de workflow
Este job instala uma versão fixa do crunu, confere o SHA-256 do instalador antes de executá-lo e roda os testes com as variáveis do staging.
jobs:
test:
runs-on: ubuntu-latest
permissions:
id-token: write # only if the token has a CI binding (OIDC)
contents: read
steps:
- uses: actions/checkout@v4
- name: Install crunu
run: |
curl -sSf "${{ vars.CRUNU_INSTALL_URL }}" -o /tmp/crunu-install.sh
echo "${{ vars.CRUNU_INSTALL_SHA256 }} /tmp/crunu-install.sh" | sha256sum -c -
sh /tmp/crunu-install.sh --version "${{ vars.CRUNU_VERSION }}" --sha256 "${{ vars.CRUNU_BINARY_SHA256 }}" --user-install
- name: Tests
env:
CRUNU_TOKEN: ${{ secrets.CRUNU_TOKEN }}
CRUNU_SERVER: ${{ vars.CRUNU_SERVER }}
run: exec crunu run --env web-app/staging -- npm testPara um token de production, o vínculo de CI (OIDC) pode exigir:
repository:kiteline/web-appref:refs/heads/mainenvironment:production
O audience é o endereço do seu servidor do Crunu. O crunu pede ao GitHub um token com esse audience, e é por isso que o job precisa de id-token: write.
A action setup-crunu
Os mesmos passos de instalação também existem como uma pequena action composta, a setup-crunu. Ela não está publicada no GitHub Marketplace. Mantenha uma cópia dos dois arquivos dela em .github/actions/setup-crunu/ no seu repositório, para que o código que lida com os segredos do seu pipeline passe pela mesma revisão que o resto do seu código. Se, em vez disso, você a publicar como um repositório separado, fixe-a num SHA de commit completo, não numa tag.
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-crunu
with:
version: ${{ vars.CRUNU_VERSION }}
install-url: ${{ vars.CRUNU_INSTALL_URL }}
install-sha256: ${{ vars.CRUNU_INSTALL_SHA256 }}
sha256: ${{ vars.CRUNU_BINARY_SHA256 }}
- env:
CRUNU_TOKEN: ${{ secrets.CRUNU_TOKEN }}
CRUNU_SERVER: ${{ vars.CRUNU_SERVER }}
run: exec crunu run --env web-app/staging -- npm testA action não se comunica com o servidor do Crunu. Ela só instala o crunu e o adiciona ao PATH para os passos seguintes.
Mantenha o token fora de alcance
- Defina o
CRUNU_TOKENnoenvdo único passo que executa ocrunu. Variáveis no nível do job e do workflow chegam a todos os passos. - Inicie o
crunucomexec. Assim, o shell do passo é substituído pelocrunu, e o token não fica num processo que o seu comando consiga ler. - O comando sob o
crunu runnunca recebe as credenciais do própriocrunu, comoCRUNU_TOKENouCRUNU_OIDC_TOKEN.
Runners e checksums
O crunu roda em runners Linux e macOS, em amd64 e arm64, inclusive em runners auto-hospedados. Runners Windows não são compatíveis. O checksum do bloco CI setup é para Linux amd64. Para runners arm64 ou macOS, defina checksums por plataforma a partir do manifest.json do release, por exemplo amd64=… e darwin-arm64=….
Production sem CI
A configuração que o Crunu recomenda mantém os valores de production fora do pipeline. O servidor de production roda o agente crunu e busca o próprio ambiente, e o workflow só entrega o código e reinicia o serviço. Veja systemd.
Revogação
Abra o token e escolha Revoke. O próximo login dele é recusado, e um passo que já está rodando termina com o que recebeu. Se o token pode ter vazado, revogue-o, rotacione as chaves dos ambientes que ele recebeu e reemita os valores contidos neles nos respectivos provedores.
Veja também
Dúvidas e respostas
Não encontrou a resposta? Escreva para support@crunu.com, e uma pessoa vai responder.
A action setup-crunu está no GitHub Marketplace?
Não. Copie os dois arquivos dela para .github/actions/setup-crunu/ no seu repositório, ou instale o crunu com três comandos simples num passo.
O job precisa da permissão id-token: write?
Só se o token de serviço tiver um vínculo de CI (OIDC). Nesse caso, o crunu pede ao GitHub um token cujo audience é o seu servidor do Crunu.
O comando que eu executo consegue ler o CRUNU_TOKEN?
O crunu run nunca passa as próprias credenciais ao comando. Defina o token só no passo que executa o crunu e inicie o crunu com exec.
Funciona em runners Windows?
Não. O crunu roda em runners Linux e macOS, em amd64 e arm64.