Começar a Usar

Introdução

Este tutorial ensina como configurar deploy automático na Zenifra usando GitHub Actions. O fluxo permite que a imagem OCI seja construída e enviada para a Zenifra automaticamente sempre que houver uma nova alteração no repositório.

Importante: Este fluxo é para projetos com origem em Imagem OCI. Ele não substitui o fluxo de projetos criados com origem em Repositório GitHub.

Pré-requisitos

  • Repositório Git com o código-fonte da aplicação
  • Projeto HTTP já criado na Zenifra
  • Conta no GitHub

O que você vai aprender

  • Configurar GitHub Actions para build automático de imagem
  • Configurar deploy automático para a plataforma Zenifra
  • Disparar deploys via tags de versão

Passo 1: Configurar Segredos no GitHub

Antes de criar o fluxo de trabalho, configure os segredos necessários no seu repositório GitHub:

  1. Acesse Settings > Secrets and variables > Actions do seu repositório
  2. Adicione os seguintes segredos:
SegredoDescrição
OCI_USERNAMEUsername do registry Docker (ex: Docker Hub)
OCI_PASSWORDToken de acesso ao registry
ZENIFRA_PROJECT_IDID do projeto na Zenifra
ZENIFRA_API_KEYAPI Key do projeto na Zenifra

Importante: O Project ID e API Key são exibidos apenas na criação do projeto. Guarde-os em local seguro.


Passo 2: Criar o Workflow

Crie o arquivo .github/workflows/deploy.yml no seu repositório:

name: Deploy PRD

on:
  push: 
    tags:  
      - 'v[0-9]+.[0-9]+.[0-9]+'

jobs:
  build:
    name: Build e Publicar Imagem
    runs-on: ubuntu-latest
    steps:
      - name: Checkout do código
        uses: actions/checkout@v4

      - name: Configurar QEMU
        uses: docker/setup-qemu-action@v3

      - name: Configurar Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login no Registry
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.OCI_USERNAME }}
          password: ${{ secrets.OCI_PASSWORD }}

      - name: Build e Publicar Imagem OCI
        run: |
          docker buildx build \
            --tag ${{ secrets.OCI_USERNAME }}/minha-app:${{ github.ref_name }} \
            --platform=linux/amd64 \
            --push .

  deploy:
    name: Deploy na Zenifra
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Deploy Imagem na Zenifra
        uses: zenifra/action-zenifra-deploy@main
        with:
          PROJECT_ID: ${{ secrets.ZENIFRA_PROJECT_ID }}
          API_KEY: ${{ secrets.ZENIFRA_API_KEY }}
          IMAGE: ${{ secrets.OCI_USERNAME }}/minha-app:${{ github.ref_name }}

Configurações do Workflow

CampoDescrição
on.push.tagsDispara o fluxo de trabalho quando uma tag no formato v1.0.0 é criada
OCI_USERNAMEUsername do seu registry Docker
PROJECT_IDID do projeto na Zenifra
API_KEYChave API do projeto
IMAGEURI completa da imagem com tag

Passo 3: Disparar a Implantação

Para disparar a implantação:

  1. Crie uma tag de versão no seu repositório:

    git tag v1.0.0
    git push origin v1.0.0
  2. O GitHub Actions executará:

    • Build da imagem Docker
    • Publicação no registry
    • Implantação automática na Zenifra

Implantação com AWS ECR

Além do Docker Hub, você pode usar o AWS ECR (Elastic Container Registry) como registro de contêineres. O exemplo abaixo demonstra um fluxo de trabalho completo usando AWS ECR.

Segredos Necessários

Adicione os seguintes segredos no seu repositório GitHub:

SegredoDescrição
AWS_ACCESS_KEY_IDAWS Access Key ID com permissões para ECR
AWS_SECRET_ACCESS_KEYAWS Secret Access Key
AWS_REGIONRegião AWS (ex: us-east-1)
AWS_ECR_URLURL do seu registry ECR (ex: 123456789.dkr.ecr.us-east-1.amazonaws.com)
ZENIFRA_PROJECT_IDID do projeto na Zenifra
ZENIFRA_API_KEYAPI Key do projeto na Zenifra

Workflow Completo (Implantação por Tag)

Este fluxo de trabalho é disparado quando uma tag no formato v1.0.0 é criada:

name: Deploy PRD

on:
  push: 
    tags:  
      - 'v[0-9]+.[0-9]+.[0-9]+'

jobs:
  build:
    name: Build e Publicar Imagem
    runs-on: ubuntu-latest
    steps:
      - name: Checkout do código
        uses: actions/checkout@v4

      - name: Configurar QEMU
        uses: docker/setup-qemu-action@v3
        with:
          platforms: linux/amd64

      - name: Configurar Docker Buildx
        uses: docker/setup-buildx-action@v3
        with:
          platforms: linux/amd64

      - name: Configurar credenciais AWS
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: Login no Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v2

      - name: Build e Publicar Imagem no ECR
        run: |
          docker buildx build \
            --tag ${{ secrets.AWS_ECR_URL }}/minha-app:${{ github.ref_name }} \
            --platform=linux/amd64 \
            --push .

  deploy:
    name: Deploy na Zenifra
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Deploy Imagem na Zenifra
        uses: ramonpaolo/action-zenifra@main
        with:
          PROJECT_ID: ${{ secrets.ZENIFRA_PROJECT_ID }}
          API_KEY: ${{ secrets.ZENIFRA_API_KEY }}
          IMAGE: ${{ secrets.AWS_ECR_URL }}/minha-app:${{ github.ref_name }}

Workflow para Pull Requests (Implantação de Staging)

Este fluxo de trabalho é disparado a cada pull request aberto ou atualizado:

name: Deploy STG

on:
  pull_request:
    types:
      - opened
      - synchronize

jobs:
  build:
    name: Build e Publicar Imagem
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - name: Checkout do código
        uses: actions/checkout@v4

      - name: Configurar QEMU
        uses: docker/setup-qemu-action@v3
        with:
          platforms: linux/amd64

      - name: Configurar Docker Buildx
        uses: docker/setup-buildx-action@v3
        with:
          platforms: linux/amd64

      - name: Configurar credenciais AWS
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: Login no Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v2

      - name: Build e Publicar Imagem no ECR
        run: |
          docker buildx build \
            --tag ${{ secrets.AWS_ECR_URL }}/minha-app-stg:${{ github.sha }} \
            --platform=linux/amd64 \
            --push .

  deploy:
    name: Deploy na Zenifra
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Deploy Imagem na Zenifra
        uses: ramonpaolo/action-zenifra@main
        with:
          PROJECT_ID: ${{ secrets.ZENIFRA_PROJECT_ID_STG }}
          API_KEY: ${{ secrets.ZENIFRA_API_KEY_STG }}
          IMAGE: ${{ secrets.AWS_ECR_URL }}/minha-app-stg:${{ github.sha }}

Vantagens do AWS ECR

VantagemDescrição
Integração AWSIntegrado nativamente com outros serviços AWS
PerformanceBaixa latência quando usado com EC2/ECS/Fargate
SegurançaCriptografia em repouso com KMS
CustoPague apenas pelo armazenamento usado
IAMControle de acesso granular via políticas IAM

Criando um Repository no ECR

Antes de usar o fluxo de trabalho, crie um repositório no AWS ECR:

aws ecr create-repository \
  --repository-name minha-app \
  --region us-east-1

O comando retornará a URL do repository:

123456789.dkr.ecr.us-east-1.amazonaws.com/minha-app

Validação

Para verificar se o deploy foi realizado com sucesso:

  1. Acesse o console da Zenifra
  2. Selecione seu projeto
  3. Verifique na aba Deployments se há um novo deploy com status "success"
  4. Acesse a URL do projeto para confirmar que a nova versão está ativa

Próximos Passos


FAQ

Posso usar outro registry além do Docker Hub?

Sim. Você pode usar AWS ECR, Google Container Registry (GCR), GitHub Container Registry (GHCR), Azure Container Registry (ACR), entre outros. Cada um possui sua própria ação de login:

  • AWS ECR: aws-actions/amazon-ecr-login@v2
  • GCR/Artifact Registry: docker/login-action@v3
  • GHCR: docker/login-action@v3 (username: ${{ github.actor }}, password: ghp_xxx)

Como funciona o versionamento?

O fluxo de trabalho usa a tag do Git como versão da imagem. Por exemplo, ao criar a tag v1.2.3, a imagem será sua-app:v1.2.3.

Qual a diferença entre deploy por tag vs. por pull request?

AspectoPor TagPor Pull Request
Uso típicoProduçãoStaging/QA
VersionamentoSemântico (v1.0.0)Hash do commit
Triggergit push tag v1.0.0git push na branch
AmbientePRDSTG

O que acontece se o build falhar?

O deploy na Zenifra não será executado. Você receberá uma notificação de falha pelo GitHub Actions com os logs de erro.

Como configurar permissões IAM para AWS ECR?

Crie uma política IAM com as seguintes permissões:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:PutImage"
      ],
      "Resource": "arn:aws:ecr:us-east-1:123456789:repository/minha-app"
    }
  ]
}

Posso fazer deploy multi-plataforma (AMD64 + ARM64)?

Sim! Adicione ambas as plataformas na configuração:

- name: Configurar QEMU
  uses: docker/setup-qemu-action@v3
  with:
    platforms: linux/amd64,linux/arm64

- name: Configurar Docker Buildx
  uses: docker/setup-buildx-action@v3
  with:
    platforms: linux/amd64,linux/arm64