Inscreva-se para receber atualizações!

    Post

    CI/CD com GitHub Actions para Projetos em Go: Do Código ao Deploy

    Aprenda a configurar pipelines de CI/CD para projetos em Go usando GitHub Actions, com integração de Docker, testes automatizados e deploy.

    Você já cansou de ficar rodando comandos manualmente toda vez que quer testar ou fazer deploy de uma aplicação? Eu também! É por isso que vou te mostrar como configurar uma pipeline de CI/CD usando GitHub Actions para nossos projetos em Go. E o melhor: vamos integrar com Docker, rodar testes automatizados e, claro, fazer o deploy como chefes. 🍕🤖

    Então, pega o café ☕ e vamos nessa!

    O que é GitHub Actions? 🤔

    Imagina um robô trabalhador que roda seus testes, builds, e até faz o deploy enquanto você está jogando seu jogo favorito ou assistindo sua série preferida. Isso é o GitHub Actions! Ele te ajuda a automatizar quase tudo dentro do GitHub, criando pipelines de integração contínua (CI) e entrega contínua (CD).

    Possibilidades com GitHub Actions 🚀

    Além de CI/CD para projetos em Go, o GitHub Actions oferece uma infinidade de possibilidades para automatizar seu fluxo de trabalho. Você pode configurar pipelines para diferentes linguagens de programação, integrar com serviços de terceiros como Slack para notificações, executar scripts personalizados, e até mesmo gerenciar tarefas de infraestrutura com ferramentas como Terraform. Com a flexibilidade dos workflows YAML, você pode criar automações complexas que atendem exatamente às suas necessidades, tornando seu desenvolvimento mais eficiente e confiável. Explore as ações disponíveis no marketplace e descubra como o GitHub Actions pode transformar a maneira como você desenvolve e entrega software.

    Vamos colocar a mão na massa! 👩‍💻👨‍💻

    Estrutura básica do nosso projeto

    alt text

    Vou supor que você já tenha um projeto Go rodando com Docker. Se não tiver, fica tranquila(o), aqui tem um mini setup básico:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    package main
    
    import (
    	"fmt"
    	"net/http"
    )
    
    func handler(w http.ResponseWriter, r *http.Request) {
    	fmt.Fprintf(w, "Hello, CI/CD!")
    }
    
    func main() {
    	http.HandleFunc("/", handler)
    	http.ListenAndServe(":8080", nil)
    }
    

    E o Dockerfile pra deixar tudo prontinho:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    FROM golang:1.19-alpine
    
    WORKDIR /app
    
    COPY . .
    
    RUN go mod download
    RUN go build -o myapp
    
    CMD ["./myapp"]
    

    Configurando o GitHub Actions 📦

    Agora é a hora de brincar com o GitHub Actions! Vamos criar uma pipeline de CI/CD para testar, buildar e fazer deploy do nosso app Go.

    No repositório do GitHub, crie a pasta .github/workflows e adicione um arquivo ci.yml com o seguinte conteúdo:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    name: Go CI/CD Pipeline
    
    on:
      push:
        branches:
          - main
      pull_request:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - name: Check out the code
            uses: actions/checkout@v2
    
          - name: Set up Go
            uses: actions/setup-go@v3
            with:
              go-version: 1.19
    
          - name: Install dependencies
            run: go mod download
    
          - name: Run tests
            run: go test ./...
    
          - name: Build Docker image
            run: docker build -t myapp .
    
          - name: Push Docker image to Docker Hub
            env:
              DOCKER_USERNAME: $
              DOCKER_PASSWORD: $
            run: |
              echo "$" | docker login -u "$" --password-stdin
              docker tag myapp $/myapp:latest
              docker push $/myapp:latest
    

    Quebrando os passos 🧩

    • Check out the code: Clona o repositório para o ambiente da action.
    • Set up Go: Configura a versão do Go (nesse caso, 1.19).
    • Install dependencies: Baixa as dependências do projeto com go mod download.
    • Run tests: Roda os testes automatizados.
    • Build Docker image: Constrói a imagem Docker do seu app Go.
    • Push Docker image: Publica a imagem no Docker Hub.

    Deploy automático 🌍

    Se você tiver um serviço de hospedagem como AWS, DigitalOcean ou qualquer outro que suporte Docker, você pode adicionar mais um passo para fazer o deploy automático assim que a imagem for publicada. Aqui, vou mostrar um exemplo simples usando o AWS:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
          - name: Log in to Amazon ECR
            uses: aws-actions/amazon-ecr-login@v1
    
          - name: Push Docker image to ECR
            run: |
              docker tag myapp:latest $/myapp:latest
              docker push $/myapp:latest
    
          - name: Deploy to AWS ECS
            env:
              AWS_REGION: us-east-1  # Substitua pela sua região
            run: |
              aws ecs update-service --cluster my-cluster --service my-service --force-new-deployment --region $AWS_REGION
    
    

    Não esqueça das variáveis de ambiente! 🔐

    Todos os segredos como senhas e chaves SSH precisam estar guardados de forma segura no GitHub Secrets. Vá no repositório, clique em “Settings” > “Secrets” > “Actions”, e adicione suas variáveis como DOCKER_USERNAME, DOCKER_PASSWORD, etc.

    alt text

    Conclusão 🎉

    Agora que você tem seu pipeline de CI/CD configurado, pode ficar tranquilo(a) enquanto o GitHub Actions faz a mágica acontecer. Testes automatizados, build com Docker, e deploy tudo rolando automaticamente. Um verdadeiro sonho, né? 💭 Além disso, as possibilidades são infinitas: você pode integrar notificações, gerenciar infraestrutura e muito mais. Para ver o código completo deste tutorial, visite o repositório no GitHub.

    alt text


    Esta postagem está licenciada sob CC BY 4.0 pelo autor.