Pular para o conteúdo principal

Jenkins x Protheus X Git - Uma linda entrega diária!

Antigamente, com o Protheus, tínhamos um processo manual de troca de RPO (Repositório de Objetos).


Com o tempo, começaram a surgir arquivos .bat, .java, e assim por diante, que começaram a automatizar essa troca no RPO (Repositório de Objetos).


Mais tarde, quando finalmente desenvolvemos um script em PowerShell (disponível em https://github.com/charlesreitz/managerRPO), entramos na fase de testes e automatização. Durante esse período, integramos nosso script ao Jenkins e ao Git (Gitea), garantindo que o projeto estivesse completamente sincronizado com o ambiente de produção.


Sim, é verdade! Costumamos implantar programas diretamente no ambiente de produção, sem um processo de testes formal com CI/CD, mas passando por vários testes e analises dos usuários. No entanto, esse cenário é bastante específico, pois o ERP com o qual trabalhamos é altamente customizável e requer atualizações frequentes.


O cliente com o qual implementamos esse sistema possui uma equipe experiente, que faz entregas diárias no ambiente de produção. Isso se deve ao fato de muitas regras de negócio da empresa estarem diretamente ligadas ao repositório do cliente, tornando essas entregas bastante comuns.


Você pode se perguntar se isso é arriscado, e a resposta é sim, é arriscado. No entanto, devido ao amplo conhecimento da equipe em relação ao processo, o risco é consideravelmente reduzido.


Mas e se a equipe for substituída? A empresa ficaria em apuros? É possível que o ambiente se torne instável, pois todo o conhecimento sobre o sistema está nas mãos das pessoas. Isso está errado? ...  


Eu sou um defensor dos testes automatizados, mas acredito que, em uma equipe enxuta focada em entregas, suporte e melhorias, seja difícil implementar um processo rigoroso de testes automatizados. No entanto, é importante equilibrar a agilidade com a segurança e considerar opções para mitigar os riscos em caso de mudanças na equipe.






Postagens mais visitadas deste blog

REST Protheus Converter charset CP1252 para UTF8 com Header Accept UTF-8

O Protheus possui um tag que pode ser utilizada para conversão para UTF8 de forma transparente, basta enviar no header da requisição a TAG ACCEPT com charset=UTF-8, também pode-se adicionar o appllication/json. Accept : application/json; charset=UTF-8 ou Accept : charset=UTF-8 Isso ajuda pois não precisa mais utilizar as funções DecodeUTF8 e EncodeUT8 pois o próprio rest já vai fazer isso.

Recursividade Minha Linda! Estrutura Produtos Protheus SG1

Fato! Depois que você conhece recursividade em sua vida tudo fica mais leve (rss... ) a recursividade pode ser infinita (pode não ta!) se for infinita vai dar problema, não pode. Mas a recursividade nos ajuda a deixar nosso sistema mais flexível e dinâmico para montar uma série de regras de negócio. Hoje vou falar exatamente da SG1, tabela TOTVS Microsiga Protheus que é utilizada para montar a estrutura de um produto dentro PCP (Planejamento e Controle de Produção). Isso séria algo que a recursividade iria ajudar. Na SG1 temos o campos G1_COD (Pai) e G1_COMP (Filho). G1_COD->G1_COMP->G1_COD->G1_COMP->G1_COD->G1_COMP Seria assim o fluxo da informação. Sem mais delongas, abaixo vou deixar o script para MSSQL para apresentar esses dados. Inté! WITH ESTRUT( CODIGO, COD_PAI, COD_COMP, QTD, PERDA, DT_INI, DT_FIM ,TRT ,RECNO, NIVEL ) AS ( SELECT G1_COD PAI, G1_COD, G1_COMP, G1_QUANT, G1_PERDA, G1_INI, G1_FIM,G1_TRT,SG1.R_E_C_N_O_, 1 AS NIVEL FR

Cadastro de funções ADVPL

FWDirRemove( cDir, nType, lComplete, lKillFiles ) Função para remover diretórios, com a vantagem de remover somente o ultimo nível ou todo o caminho. cDir                   Diretório a ser removido lComplete          Remove todo o caminho (.T.) ou apenas o ultimo nível (.F.) lKillFiles             Remove os arquivos antes de tentar remover o diretório FWMakeDir( cDir, lShowMsg ) Função para criar diretório com seus subdiretórios, com a vantagem de criar todo o caminho. cDir                    Diretório a ser criado lShowMsg          Exibe ou não mensagem caso não consiga criar o diretório FwNoAccent( cString ) Retira acentos de uma string cString                 String a ser retirado os acentos Exemplo: cString := 'O avião não pôde aterrissar de manhã' cString := FwNoAccent( cString ) // Retorna : 'O aviao nao pode aterrissar de manha' FWGetSX5( cTable, cKey ) Função de retorno dos campos de uma tabela no SX5 cTable                  Tabela para pesquisa no SX5. Par