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:
- Conhecimento básico de Laravel e CI/CD.
- Um projeto Laravel configurado e hospedado em um repositório GitLab.
- Acesso a um servidor de produção para implantar a aplicação.
- 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:
- Acesse o painel de configurações do projeto no GitLab.
- Selecione a opção “CI/CD” no menu lateral.
- Clique em “Variáveis do projeto”.
- 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.