Como criar uma pipeline CI/CD eficiente para Laravel utilizando GitLab, Graylog e CD Automático

Como criar uma pipeline CI/CD eficiente para Laravel utilizando GitLab, Graylog e CD Automático

Neste artigo, abordaremos o processo de criação de uma pipeline CI/CD para aplicações Laravel, utilizando o GitLab como ferramenta de versionamento, integração com o Graylog para notificações e o recurso de CD automático. Aprenda a automatizar o desenvolvimento, testes e implantação de forma eficiente, visando a entrega contínua e a qualidade do código.

Pré-requisitos

Antes de prosseguir, é importante garantir que você atenda aos seguintes pré-requisitos:

  1. Conhecimento básico de Laravel e CI/CD.
  2. Um projeto Laravel configurado e hospedado em um repositório GitLab.
  3. Acesso a um servidor de produção para implantar a aplicação.
  4. Uma instância do Graylog configurada para receber notificações.

Passo 1: Configurando o arquivo .gitlab-ci.yml

A primeira etapa para criar a pipeline CI/CD é configurar o arquivo .gitlab-ci.yml no seu projeto Laravel. O arquivo define as etapas que a pipeline seguirá, incluindo compilação, testes e implantação. Veja abaixo um exemplo completo do arquivo .gitlab-ci.yml para uma aplicação Laravel:

# .gitlab-ci.yml
variables:
  MYSQL_DATABASE: "nome_do_banco_de_dados"
  MYSQL_ROOT_PASSWORD: "senha_do_banco_de_dados"

stages:
  - build
  - test
  - deploy_staging
  - deploy_production

build:
  stage: build
  script:
    - composer install
    - npm install
    - npm run prod

test:
  stage: test
  script:
    - php artisan test

deploy_staging:
  stage: deploy_staging
  script:
    - ssh user@staging 'cd /var/www/myapp && git pull'
    - ssh user@staging 'cd /var/www/myapp && composer install --no-dev'
    - ssh user@staging 'cd /var/www/myapp && php artisan migrate --force'
  environment:
    name: staging

deploy_production:
  stage: deploy_production
  script:
    - ssh user@production 'cd /var/www/myapp && git pull'
    - ssh user@production 'cd /var/www/myapp && composer install --no-dev --no-interaction --prefer-dist'
    - ssh user@production 'cd /var/www/myapp && php artisan migrate --force'
  environment:
    name: production
    only:
      - tags

No exemplo acima, definimos as etapas da pipeline, como compilação, testes e implantação para ambientes de staging e produção. Por exemplo utilizamos variáveis para armazenar as configurações do banco de dados. Nesse sentido, é importante substituir “nome_do_banco_de_dados” e “senha_do_banco_de_dados” pelos valores corretos para o seu projeto.

Passo 2: Configurando as notificações para o Graylog

Em seguida, iremos configurar as notificações para o Graylog, uma plataforma de gerenciamento de logs em tempo real. Contudo, isso nos permite monitorar os logs da aplicação durante o processo de implantação.

No arquivo .gitlab-ci.yml, adicione o seguinte trecho de código:

graylog:
  stage: notify
  script:
    - apt-get update && apt-get install -y curl
    - curl -X POST -H "Content-Type: application/json" -d '{"version":"1.1","host":"myapp","short_message":"Deploy completo","full_message":"A implantação da última release foi concluída com sucesso","timestamp":'$(date +%s)',"level":1}' http://my.graylog.server:12201/gelf

Nesse trecho de código, criamos uma nova etapa chamada “graylog” que será executada após a etapa de implantação. Porém, utilizamos o comando curl para enviar uma mensagem para o Graylog informando que o deploy foi concluído com sucesso.

Passo 3: Configurando o CD automático

Uma das vantagens da pipeline CI/CD é a possibilidade de realizar o CD automático, ou seja, a implantação da aplicação assim que uma nova versão é criada.

Adicione o seguinte trecho de código no arquivo .gitlab-ci.yml:

auto-deploy:
  stage: deploy_production
  script:
    - ssh user@production 'cd /var/www/myapp && git fetch && git checkout tags/$CI_COMMIT_TAG'
    - ssh user@production 'cd /var/www/myapp && composer install --no-dev --no-interaction --prefer-dist'
    - ssh user@production 'cd /var/www/myapp && php artisan migrate --force'
  environment:
    name: production
    only:
      - tags

Nesse trecho de código, criamos uma nova etapa chamada “auto-deploy” que será executada somente quando uma nova tag for criada. Porém, utilizamos o comando SSH para acessar o servidor de produção e realizar o deploy da versão correspondente à tag mais recente.

Passo 4: Configurando o CD agendado

Outra funcionalidade interessante é a possibilidade de agendar o CD, apenas o que pode ser útil para realizar implantações em horários específicos, Desde que fora do horário comercial ou em momentos de menor tráfego. Contudo, Isso pode ser feito utilizando o recurso de Schedule do GitLab.

Adicione o seguinte trecho de código no arquivo .gitlab-ci.yml:

deploy_scheduled:
  stage: deploy_production
  script:
    - ssh user@production 'cd /var/www/myapp && git pull'
    - ssh user@production 'cd /var/www/myapp && composer install --no-dev --no-interaction --prefer-dist'
    - ssh user@production 'cd /var/www/myapp && php artisan migrate --force'
  environment:
    name: production
    only:
      - schedules

Nesse trecho de código, criamos uma nova etapa chamada “deploy_scheduled” que será executada quando o agendamento de pipeline for ativado no GitLab. Contudo, utilizamos o comando SSH para realizar o deploy da versão mais recente no servidor de produção.

Passo 5: Configurando as variáveis do projeto

Sobretudo, é importante configurar as variáveis do projeto para armazenar informações sensíveis, como senhas e tokens de acesso, fora do arquivo .gitlab-ci.yml Bem como dessa forma, garantimos a segurança dessas informações.

Para configurar as variáveis do projeto, siga os seguintes passos:

  1. Acesse o painel de configurações do projeto no GitLab.
  2. Selecione a opção “CI/CD” no menu lateral.
  3. Clique em “Variáveis do projeto”.
  4. Adicione as variáveis que serão utilizadas na pipeline, como “SSH_PRIVATE_KEY” para armazenar a chave privada de acesso ao servidor de produção.

Com as variáveis do projeto configuradas, podemos utilizá-las no arquivo .gitlab-ci.yml utilizando a sintaxe $VARIABLE_NAME.

Conclusão

Neste artigo, aprendemos a criar uma pipeline CI/CD eficiente para projetos Laravel, utilizando o GitLab como ferramenta de versionamento. Assim exploramos a integração com o Graylog para notificações em tempo real e a configuração de CD automático ao criar uma nova release. Bem como também vimos como agendar o CD e configurar as variáveis do projeto para armazenar informações sensíveis de forma segura.

Com a pipeline CI/CD configurada, você terá um processo automatizado de desenvolvimento, testes e implantação, o que contribuirá para a entrega contínua e a qualidade do seu código. Enfim lembre-se de revisar e ajustar a pipeline de acordo com as necessidades específicas do seu projeto.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *