Jenkins

3 posts

Implementando um Pipeline de Desenvolvimento com Jenkins, Gitea e Docker


Implementando um Pipeline de Desenvolvimento com Jenkins, Gitea e Docker

No mundo do desenvolvimento de software, a automatização de processos é fundamental para garantir a eficiência e a qualidade do produto final. Uma das formas mais eficazes de automatizar o fluxo de trabalho de desenvolvimento é através da implementação de um pipeline de integração contínua e entrega contínua (CI/CD). Neste artigo, vamos explorar como criar um pipeline de desenvolvimento utilizando três ferramentas poderosas: Jenkins, Gitea e Docker.

Introdução ao Pipeline de Desenvolvimento

Um pipeline de desenvolvimento é uma série de etapas automatizadas que transformam o código-fonte em um produto de software pronto para uso. Essas etapas podem incluir compilação, testes, empacotamento e implantação. A automatização desse processo permite que os desenvolvedores se concentrem em escrever código, enquanto o pipeline cuida das tarefas repetitivas e propensas a erros.

Ferramentas Utilizadas

  • Jenkins: Uma ferramenta de automação de software de código aberto que permite a integração contínua e a entrega contínua. O Jenkins pode ser estendido com uma vasta gama de plugins para suportar diferentes tecnologias e ambientes.
  • Gitea: Um serviço de hospedagem de código-fonte de código aberto, semelhante ao GitHub. Ele permite que os desenvolvedores colaborem em projetos, rastreiem problemas e gerenciem o código-fonte.
  • Docker: Uma plataforma de contêinerização que permite aos desenvolvedores empacotar aplicações e suas dependências em um ambiente virtualizado que pode ser executado em qualquer lugar.

Configurando o Ambiente

Antes de começar a configurar o pipeline, é necessário ter as ferramentas instaladas e configuradas. Vamos supor que você já tenha um servidor Linux (como Ubuntu) pronto para uso.

Instalando o Gitea

Para instalar o Gitea, siga os passos abaixo:

  1. Baixe o arquivo binário do Gitea:
  2. wget https://dl.gitea.io/gitea/1.16.3/gitea-1.16.3-linux-amd64.tar.gz
  3. Extraia o arquivo:
  4. tar -zxvf gitea-1.16.3-linux-amd64.tar.gz
  5. Mova os arquivos para o diretório desejado:
  6. sudo mv gitea-1.16.3-linux-amd64 /var/gitea
  7. Crie um usuário para o Gitea:
  8. sudo adduser gitea
  9. Configure o Gitea para iniciar como um serviço:
  10. sudo nano /etc/systemd/system/gitea.service

    Adicione o seguinte conteúdo ao arquivo:

    [Unit]
    Description=Gitea (Git with a cup of tea)
    After=syslog.target network.target
    
    [Service]
    User=gitea
    Group=gitea
    WorkingDirectory=/var/gitea
    ExecStart=/var/gitea/gitea web
    
    [Install]
    WantedBy=multi-user.target
  11. Inicie o serviço do Gitea:
  12. sudo systemctl start gitea
  13. Habilite o serviço para iniciar na inicialização:
  14. sudo systemctl enable gitea

Instalando o Docker

Para instalar o Docker, siga os passos abaixo:

  1. Atualize o sistema:
  2. sudo apt update
  3. Instale as dependências necessárias:
  4. sudo apt install 
        ca-certificates 
        curl 
        gnupg 
        lsb-release
  5. Adicione a chave GPG oficial do Docker:
  6. sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  7. Adicione o repositório do Docker ao seu sistema:
  8. echo 
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu 
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  9. Instale o Docker:
  10. sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  11. Verifique se o Docker foi instalado corretamente:
  12. sudo docker run hello-world

Instalando o Jenkins

Para instalar o Jenkins, siga os passos abaixo:

  1. Adicione a chave GPG do Jenkins:
  2. wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
  3. Adicione o repositório do Jenkins:
  4. sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > 
        /etc/apt/sources.list.d/jenkins.list'
  5. Atualize o sistema:
  6. sudo apt update
  7. Instale o Jenkins:
  8. sudo apt install jenkins
  9. Inicie o serviço do Jenkins:
  10. sudo systemctl start jenkins
  11. Habilite o serviço para iniciar na inicialização:
  12. sudo systemctl enable jenkins

Configurando o Pipeline

Agora que temos todas as ferramentas instaladas, vamos configurar o pipeline de desenvolvimento.

Configurando o Jenkins

Após a instalação, acesse o Jenkins através do seu navegador em http://seu-servidor:8080. Siga os passos para completar a configuração inicial.

Instalando Plugins

Para integrar o Jenkins com o Gitea e o Docker, é necessário instalar alguns plugins. Acesse o painel de administração do Jenkins e navegue até “Gerenciar Jenkins” > “Gerenciar Plugins”. Instale os seguintes plugins:

  • Gitea Plugin
  • Docker Plugin
  • Pipeline Plugin

Criando um Novo Pipeline

Clique em “Novo Item”, escolha “Pipeline” e dê um nome ao seu projeto. Em “Definição”, selecione “Pipeline script” e adicione o seguinte script:

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git 'https://seu-servidor/seu-usuario/seu-repositorio.git'
            }
        }
        stage('Build') {
            steps {
                sh 'docker build -t seu-servidor/seu-projeto:latest .'
            }
        }
        stage('Test') {
            steps {
                sh 'docker run seu-servidor/seu-projeto:latest ./run-tests.sh'
            }
        }
        stage('Deploy') {
            steps {
                sh 'docker push seu-servidor/seu-projeto:latest'
            }
        }
    }
}

Configurando o Gitea

No Gitea, crie um novo repositório para o seu projeto. Em seguida, configure um webhook para notificar o Jenkins sempre que houver uma nova commit.

  1. Navegue até o seu repositório no Gitea.
  2. Clique em “Configurações” > “Webhooks”.
  3. Adicione um novo webhook com a URL http://seu-servidor:8080/gitea-webhook/.

Configurando o Docker

Certifique-se de que o Dockerfile e o script de testes estejam configurados corretamente no seu repositório. O Dockerfile deve construir a imagem da sua aplicação, e o script de testes deve executar os testes automatizados.

Executando o Pipeline

Com tudo configurado, faça um commit no seu repositório no Gitea. O webhook notificará o Jenkins, que iniciará o pipeline. Você pode acompanhar o progresso do pipeline no painel do Jenkins.

Conclusão

A implementação de um pipeline de desenvolvimento com Jenkins, Gitea e Docker pode parecer complexa à primeira vista, mas os benefícios em termos de eficiência e qualidade do software são inegáveis. Ao automatizar o processo de integração contínua e entrega contínua, os desenvolvedores podem se concentrar no que realmente importa: escrever código de alta qualidade.

Palavras-chave

pipeline, Jenkins, Gitea, Docker, CI/CD, integração contínua, entrega contínua, automação, desenvolvimento de software, DevOps

Implementando uma Esteira CI/CD com Docker, Jenkins e AWS EKS

Implementando uma Esteira CI/CD com Docker, Jenkins e AWS EKS

A adoção de práticas de Continuous Integration (CI) e Continuous Deployment (CD) tem se tornado essencial para equipes de desenvolvimento que buscam agilidade, qualidade e eficiência no processo de entrega de software. Neste artigo, vamos explorar como criar uma esteira CI/CD utilizando Docker, Jenkins e AWS Elastic Kubernetes Service (EKS). Vamos abordar cada componente em detalhes e fornecer exemplos práticos para ilustrar o processo.

Introdução ao CI/CD

O CI/CD é uma metodologia que visa automatizar o processo de integração e entrega de código. Ao integrar continuamente as mudanças no código-fonte e implantá-las automaticamente em um ambiente de produção, as equipes podem reduzir o tempo de ciclo de desenvolvimento, melhorar a qualidade do software e aumentar a confiança na entrega de novas funcionalidades.

Componentes da Esteira CI/CD

Para construir uma esteira CI/CD robusta, precisamos de alguns componentes-chave:

  • Docker: Um sistema de containerização que permite empacotar aplicações e suas dependências em imagens, facilitando a implantação em diferentes ambientes.
  • Jenkins: Uma ferramenta de automação de software de código aberto que permite orquestrar tarefas de construção, teste e implantação.
  • AWS EKS: Um serviço gerenciado da Amazon Web Services que facilita a execução de aplicações em contêineres usando o Kubernetes.

Configurando o Docker

O Docker é fundamental para criar ambientes consistentes e reproduzíveis para nossas aplicações. Vamos começar configurando um Dockerfile para nossa aplicação.

Criando um Dockerfile

Um Dockerfile é um script que contém instruções para construir uma imagem Docker. Aqui está um exemplo simples para uma aplicação Node.js:


      FROM node:14
      WORKDIR /app
      COPY package*.json ./
      RUN npm install
      COPY . .
      EXPOSE 3000
      CMD ["node", "app.js"]
    

Este Dockerfile inicia a partir da imagem oficial do Node.js, define o diretório de trabalho, copia os arquivos de configuração, instala as dependências, copia o código-fonte e expõe a porta 3000.

Construindo e Executando a Imagem Docker

Para construir a imagem Docker, use o seguinte comando:


      docker build -t minha-app .
    

E para executar o contêiner:


      docker run -p 3000:3000 minha-app
    

Configurando o Jenkins

O Jenkins é uma ferramenta poderosa para automatizar tarefas de CI/CD. Vamos configurá-lo para construir e testar nossa aplicação sempre que houver uma mudança no repositório.

Instalando o Jenkins

Você pode instalar o Jenkins em sua própria máquina ou usar um serviço gerenciado como o Jenkins X. Para este exemplo, vamos supor que você já tenha o Jenkins instalado e configurado.

Criando um Pipeline no Jenkins

Um pipeline no Jenkins é um conjunto de tarefas que são executadas em sequência. Vamos criar um pipeline para construir, testar e implantar nossa aplicação.


      pipeline {
          agent any
          stages {
              stage('Build') {
                  steps {
                      sh 'docker build -t minha-app .'
                  }
              }
              stage('Test') {
                  steps {
                      sh 'docker run minha-app npm test'
                  }
              }
              stage('Deploy') {
                  steps {
                      sh 'docker push minha-app:latest'
                      sh 'kubectl apply -f deployment.yaml'
                  }
              }
          }
      }
    

Este pipeline define três estágios: Build, Test e Deploy. No estágio Build, ele constrói a imagem Docker. No estágio Test, ele executa os testes dentro do contêiner. No estágio Deploy, ele envia a imagem para um registro Docker e aplica um manifesto Kubernetes para implantar a aplicação no EKS.

Configurando o AWS EKS

O AWS EKS é um serviço gerenciado que facilita a execução de aplicações em contêineres usando o Kubernetes. Vamos configurar um cluster EKS e implantar nossa aplicação nele.

Criando um Cluster EKS

Para criar um cluster EKS, você pode usar a AWS Management Console, a CLI da AWS ou o CloudFormation. Aqui está um exemplo usando a CLI da AWS:


      eksctl create cluster --name meu-cluster --region sa-east-1 --nodes 2
    

Este comando cria um cluster EKS chamado “meu-cluster” na região “sa-east-1” com 2 nós.

Configurando o kubectl

Para interagir com o cluster EKS, você precisa configurar o kubectl:


      aws eks --region sa-east-1 update-kubeconfig --name meu-cluster
    

Este comando atualiza o arquivo de configuração do kubectl para apontar para o cluster EKS.

Criando um Deployment no Kubernetes

Um deployment no Kubernetes é uma abstração que gerencia um conjunto de pods idênticos. Vamos criar um deployment para nossa aplicação:


      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: minha-app
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: minha-app
        template:
          metadata:
            labels:
              app: minha-app
          spec:
            containers:
            - name: minha-app
              image: 123456789012.dkr.ecr.sa-east-1.amazonaws.com/minha-app:latest
              ports:
              - containerPort: 3000
    

Este deployment cria 3 réplicas do contêiner “minha-app” usando a imagem armazenada no Amazon ECR.

Integrando Tudo

Agora que temos todos os componentes configurados, vamos integrar tudo para criar uma esteira CI/CD completa.

Fluxo de Trabalho Completo

  1. Um desenvolvedor faz uma mudança no código-fonte e envia uma pull request para o repositório.
  2. O Jenkins detecta a mudança e inicia um pipeline.
  3. O pipeline constrói a imagem Docker, executa os testes e, se tudo estiver correto, envia a imagem para o Amazon ECR.
  4. O pipeline aplica o deployment no Kubernetes, atualizando as réplicas do contêiner no cluster EKS.
  5. A aplicação é implantada e pronta para uso.

Conclusão

Neste artigo, exploramos como criar uma esteira CI/CD utilizando Docker, Jenkins e AWS EKS. Ao automatizar o processo de construção, teste e implantação, podemos entregar software de forma mais rápida, confiável e eficiente. Com as práticas de CI/CD, as equipes podem se concentrar em inovar e melhorar continuamente suas aplicações.

Palavras-chave

CI/CD, Continuous Integration, Continuous Deployment, Docker, Jenkins, AWS EKS, Kubernetes, DevOps, automação, pipeline, deployment, containerização, Amazon Web Services, ECR, kubectl, desenvolvimento ágil

Kubernetes, Docker e Jenkins: A Trilogia da Automação de DevOps


Kubernetes, Docker e Jenkins: A Trilogia da Automação de DevOps

No mundo acelerado do desenvolvimento de software, a eficiência e a agilidade são fundamentais. Três ferramentas se destacam na automação de processos DevOps: Kubernetes, Docker e Jenkins. Neste post, vamos explorar cada uma dessas ferramentas em profundidade, entender como elas se integram e como podem transformar o seu pipeline de desenvolvimento.

Kubernetes: Orquestrando Contêineres

Kubernetes, frequentemente abreviado como K8s, é uma plataforma de orquestração de contêineres open-source projetada para automatizar a implantação, escalonamento e gerenciamento de aplicações em contêineres. Desenvolvido inicialmente pelo Google e agora mantido pela Cloud Native Computing Foundation (CNCF), Kubernetes se tornou o padrão ouro para gerenciar aplicações em ambientes de produção.

Principais Recursos do Kubernetes

  • Automação de Implantação e Rollouts: Kubernetes automatiza a implantação de aplicações, permitindo atualizações contínuas e rollbacks em caso de falhas.
  • Escalabilidade Automática: Com o Horizontal Pod Autoscaler (HPA), Kubernetes pode ajustar automaticamente o número de pods com base na demanda.
  • Gerenciamento de Serviços: Kubernetes facilita a descoberta e comunicação entre serviços, permitindo a criação de serviços abstratos que podem ser acessados por outros pods.
  • Tolerância a Falhas: Kubernetes monitora e gerencia a saúde dos pods, reiniciando ou substituindo automaticamente aqueles que falham.

Como Funciona o Kubernetes

Kubernetes opera em um modelo de master-worker. O componente principal é o master, que consiste em vários componentes, incluindo o kube-apiserver, o etcd (armazenamento de dados chave-valor) e o controller-manager. Os nós de trabalho, ou workers, executam os contêineres e são gerenciados pelo master.

Docker: Empacotando Aplicações em Contêineres

Docker é uma plataforma de contêinerização que permite empacotar aplicações e suas dependências em um ambiente isolado, garantindo que a aplicação funcione de forma consistente em qualquer ambiente. Isso resolve o problema clássico do “funciona no meu computador” e simplifica o processo de implantação.

Principais Recursos do Docker

  • Isolação de Ambiente: Cada contêiner Docker é isolado, compartilhando apenas o kernel do sistema operacional hospedeiro.
  • Portabilidade: Contêineres Docker podem ser executados em qualquer ambiente que suporte Docker, seja localmente, na nuvem ou em ambientes híbridos.
  • Eficiência de Recursos: Contêineres são mais leves e rápidos de iniciar do que máquinas virtuais, o que os torna ideais para ambientes de desenvolvimento e produção.
  • Ecossistema Amplo: Docker Hub, o repositório oficial de imagens Docker, oferece uma vasta biblioteca de imagens pré-configuradas para diversas aplicações e sistemas operacionais.

Como Funciona o Docker

Docker utiliza um arquivo de configuração chamado Dockerfile para definir como uma imagem de contêiner deve ser construída. O comando docker build é usado para criar uma imagem a partir de um Dockerfile, e o comando docker run é usado para executar um contêiner a partir de uma imagem.

Jenkins: Automatizando o Pipeline de CI/CD

Jenkins é uma ferramenta de automação de software de código aberto que permite a integração contínua (CI) e entrega contínua (CD). Com uma vasta comunidade e uma biblioteca de plugins, Jenkins se tornou a escolha preferida para automatizar pipelines de desenvolvimento.

Principais Recursos do Jenkins

  • Integração Contínua (CI): Jenkins pode ser configurado para executar builds automaticamente sempre que alterações são feitas no código-fonte.
  • Entrega Contínua (CD): Jenkins facilita a implantação automática de aplicações em ambientes de teste e produção.
  • Extensibilidade: Com mais de 1.800 plugins disponíveis, Jenkins pode ser personalizado para atender às necessidades específicas de qualquer projeto.
  • Notificações e Relatórios: Jenkins pode enviar notificações por e-mail ou integrações com ferramentas de comunicação como Slack, e gerar relatórios detalhados sobre builds e testes.

Como Funciona o Jenkins

Jenkins opera com base em jobs, que são configurados para executar uma série de tarefas, como checkout de código-fonte, compilação, testes e implantação. Cada job pode ser disparado manualmente ou automaticamente com base em eventos, como commits em um repositório Git.

Integrando Kubernetes, Docker e Jenkins

A integração de Kubernetes, Docker e Jenkins cria um pipeline de DevOps altamente eficiente. Vamos explorar como essas ferramentas podem trabalhar juntas para automatizar o desenvolvimento, teste e implantação de aplicações.

Pipeline de CI/CD com Jenkins e Docker

Um pipeline típico de CI/CD com Jenkins e Docker envolve as seguintes etapas:

  1. Checkout do Código-Fonte: Jenkins verifica o código-fonte a partir de um repositório Git.
  2. Construção da Imagem Docker: Jenkins usa um Dockerfile para construir uma imagem Docker da aplicação.
  3. Testes Automatizados: A imagem Docker é executada em um contêiner para realizar testes automatizados.
  4. Push da Imagem para o Registro: Se os testes passarem, a imagem Docker é enviada para um registro de contêineres, como Docker Hub ou um registro privado.

Implantação com Kubernetes

Após a construção e teste da imagem Docker, a próxima etapa é implantar a aplicação em um cluster Kubernetes. Isso pode ser feito usando um job Jenkins que executa comandos kubectl para aplicar um manifesto YAML que define a configuração da aplicação no cluster Kubernetes.

Exemplo de Pipeline Jenkins

Aqui está um exemplo de um pipeline Jenkins que integra Docker e Kubernetes:


    pipeline {
        agent any
        stages {
            stage('Checkout') {
                steps {
                    git 'https://github.com/seu-repositorio.git'
                }
            }
            stage('Build') {
                steps {
                    sh 'docker build -t sua-aplicacao:latest .'
                }
            }
            stage('Test') {
                steps {
                    sh 'docker run --rm sua-aplicacao:latest ./run-tests.sh'
                }
            }
            stage('Push') {
                steps {
                    withCredentials([usernamePassword(credentialsId: 'docker-hub', passwordVariable: 'PASS', usernameVariable: 'USER')]) {
                        sh "docker login -u $USER -p $PASS"
                        sh 'docker push sua-aplicacao:latest'
                    }
                }
            }
            stage('Deploy') {
                steps {
                    withCredentials([file(credentialsId: 'kubeconfig', variable: 'KUBECONFIG')]) {
                        sh 'kubectl apply -f deployment.yaml'
                    }
                }
            }
        }
    }
    

Benefícios da Integração

A integração de Kubernetes, Docker e Jenkins oferece vários benefícios:

  • Automatização Total: Desde o checkout do código-fonte até a implantação em produção, todo o processo é automatizado.
  • Consistência: Aplicativos são empacotados em contêineres, garantindo que funcionem da mesma forma em qualquer ambiente.
  • Escalabilidade: Kubernetes permite o escalonamento automático de aplicações com base na demanda.
  • Velocidade: Pipelines automatizados reduzem o tempo de ciclo de desenvolvimento, permitindo entregas mais rápidas.

Conclusão

Kubernetes, Docker e Jenkins são ferramentas poderosas que, quando integradas, podem transformar o seu pipeline de desenvolvimento. Ao automatizar a construção, teste e implantação de aplicações, você pode alcançar uma maior eficiência, consistência e velocidade no seu processo de desenvolvimento de software. Explore essas ferramentas e descubra como elas podem beneficiar o seu projeto.

Palavras-chave

Kubernetes, Docker, Jenkins, DevOps, automação, CI/CD, contêinerização, orquestração, pipeline, integração contínua, entrega contínua, automatização de processos, escalabilidade, portabilidade, eficiência de recursos, ecossistema de contêineres, Dockerfile, kube-apiserver, etcd, controller-manager, Horizontal Pod Autoscaler, HPA, kubeconfig, kubectl, manifesto YAML, registro de contêineres, Docker Hub, Jenkinsfile, pipeline Jenkins, automação de builds, testes automatizados, implantação contínua, benefícios da integração, ciclo de desenvolvimento, entrega de software.