← Wiki

Do Obsidian ao site: publicar com Azure Pipelines

  • 4 min de leitura
Nesta página

O Azure Pipelines é o serviço de automação do Azure DevOps, da Microsoft. Ele faz o mesmo que o GitHub Actions da página anterior: a cada envio do vault que mexe no blog ou no site, gera o site e o publica na Cloudflare. O vault continua no GitHub; o Azure DevOps só lê o repositório.

Use esta página no lugar da do GitHub Actions, não junto com ela: com as duas, cada envio publicaria o site duas vezes.

O pipeline completo

trigger:
  branches:
    include: [main]
  paths:
    include: [blog, .site, azure-pipelines.yml]

pr: none

pool:
  vmImage: ubuntu-latest

steps:
  - checkout: self
    displayName: Baixar só blog/ e .site/
    fetchDepth: 1
    fetchFilter: blob:none
    sparseCheckoutPatterns: /blog/ /.site/

  - task: UseNode@1
    displayName: Preparar o Node
    inputs:
      version: 22.x

  - script: |
      npm ci
      npm run build
    displayName: Gerar o site
    workingDirectory: .site

  - script: npx wrangler@4 deploy --assets ./dist --name meu-blog --compatibility-date 2026-10-15
    displayName: Publicar na Cloudflare
    workingDirectory: .site
    env:
      CLOUDFLARE_API_TOKEN: $(CLOUDFLARE_API_TOKEN)
      CLOUDFLARE_ACCOUNT_ID: $(CLOUDFLARE_ACCOUNT_ID)

O arquivo se chama azure-pipelines.yml e fica na raiz do vault. Troque meu-blog e a data pelos que você usou na primeira publicação na Cloudflare.

O que cada parte faz

Quando roda (trigger). Num envio para a main que mexe em blog/, em .site/ ou no próprio pipeline. pr: none desliga as execuções em pull request, que um vault não usa.

Baixar só blog/ e .site/. O checkout baixa só o último commit (fetchDepth: 1), não baixa de antemão o conteúdo dos arquivos (fetchFilter: blob:none) e deixa no disco só as duas pastas (sparseCheckoutPatterns, padrões separados por espaço). O conteúdo das suas outras notas não chega à máquina do pipeline; só a lista de nomes dos arquivos, que faz parte do commit. Por padrão, o Azure Pipelines não deixa a credencial do repositório gravada na pasta baixada.

Preparar o Node. A tarefa UseNode@1 instala a versão mais recente do Node 22, a linha que o template pede.

Gerar o site e Publicar na Cloudflare. Os mesmos comandos que você roda no computador. Se o template recusar alguma nota, o passo de gerar falha e a publicação não roda. As variáveis secretas do Azure só chegam a um comando quando aparecem no env dele, como no último passo.

Sobre o plano gratuito

Em projetos privados, o Azure Pipelines dá um job gratuito de até 60 minutos por vez, com limite de 1.800 minutos por mês. Para receber esse plano gratuito, a organização precisa estar ligada a uma assinatura válida do Azure, com cobrança configurada. É um passo a mais que o GitHub Actions não pede, e o motivo de o guia recomendar o GitHub Actions para quem não usa o Azure DevOps.

Criar o pipeline

  1. Em dev.azure.com, crie uma organização e, dentro dela, um projeto privado.
  2. Crie o arquivo no repositório do vault pelo site do GitHub: Add file → Create new file, nome azure-pipelines.yml, cole o pipeline e clique em Commit changes. Depois, traga a mudança para o computador com Fetch origin e Pull origin no GitHub Desktop.
  3. No projeto, vá a Pipelines → New pipeline, escolha GitHub e autorize o Azure Pipelines a ler os seus repositórios.
  4. Escolha o repositório do vault. O Azure DevOps encontra o azure-pipelines.yml e mostra o arquivo.
  5. Antes de rodar, clique em Variables e crie as duas variáveis da página da Cloudflare: CLOUDFLARE_API_TOKEN, com Keep this value secret marcado, e CLOUDFLARE_ACCOUNT_ID.
  6. Salve e rode.

Na primeira execução, o Azure DevOps pode pedir autorização para o pipeline usar algum recurso. A execução fica esperando até alguém clicar em Authorize resources e confirmar.

Conferir a primeira execução

Mova uma nota para blog/ e envie o vault. Em Pipelines, aparece uma execução com o log de cada passo.

Se falhar em Causa provável
Gerar o site Uma nota fora do que o template pede. O log mostra a nota e a propriedade
Publicar na Cloudflare Variável faltando, não mapeada no env ou token vencido
Nada rodou O envio não mexeu em blog/, .site/ nem no pipeline, ou o gatilho do pipeline foi desligado nas configurações dele

Em qualquer falha, o site no ar continua como estava.