Translate

sábado, 19 de novembro de 2022

Continuous Integration e Continuous Delivery (CI/CD): O Pipeline Invisível que Transformou o Mainframe sem Pedir Permissão ao COBOL

 

Bellacosa Mainframe apresenta CI/CD na Stack Mainframe

☕ Um Café no Bellacosa Mainframe

Continuous Integration e Continuous Delivery (CI/CD): O Pipeline Invisível que Transformou o Mainframe sem Pedir Permissão ao COBOL

"Você pode passar vinte anos escrevendo COBOL sem nunca criar um pipeline CI/CD. Mas dificilmente trabalhará em uma empresa moderna sem que algum pipeline execute o seu programa diversas vezes antes de chegar à produção."

Existe uma cena que acontece diariamente em centenas de bancos, seguradoras e grandes empresas.

O programador termina um programa COBOL.

Compila.

Resolve alguns erros.

Faz o BIND.

Executa testes.

Entrega para homologação.

Dias depois alguém pergunta:

— "Já passou pelo pipeline?"

O programador COBOL mais experiente responde naturalmente.

O padawan pergunta:

"Pipeline? Eu só alterei três linhas..."

E aí começa a descoberta de um dos maiores conceitos da engenharia de software moderna.


O que é CI/CD?

CI/CD significa:

  • Continuous Integration

  • Continuous Delivery (ou Continuous Deployment)

Não é uma ferramenta.

Não é Docker.

Não é Jenkins.

Não é Git.

Não é GitHub.

Não é Azure DevOps.

CI/CD é uma filosofia de trabalho.

É uma maneira de entregar software continuamente com segurança.

Se antigamente uma equipe entregava uma versão a cada seis meses, hoje algumas empresas fazem dezenas ou centenas de implantações por dia.

E sim...

Isso também acontece em ambientes IBM Z.


O problema antigo

Imagine um banco em 1998.

Existem:

  • 600 programas COBOL

  • 180 JCLs

  • 90 CICS

  • dezenas de COPYBOOKS

  • centenas de PROC

  • milhares de datasets

João altera um COPYBOOK.

Maria altera um programa.

Carlos modifica outro programa.

Pedro altera um JCL.

Na sexta-feira tudo é colocado em produção.

Ninguém sabe exatamente:

  • quem alterou o quê

  • qual versão entrou

  • quem compilou

  • qual compilador foi usado

  • quais módulos dependem daquele COPYBOOK

Resultado?

ABEND.


A integração contínua nasceu para resolver isso

A ideia é simples.

Sempre que alguém altera código...

o sistema automaticamente:

  • baixa o código

  • compila

  • executa testes

  • verifica qualidade

  • mede cobertura

  • procura vulnerabilidades

  • gera relatórios

  • cria pacotes

  • disponibiliza para homologação

Sem intervenção humana.


Pense como um Batch

O coboleiro entende isso rapidamente.

Imagine um JOB.

STEP010 - COMPILA

↓

STEP020 - LINKEDIT

↓

STEP030 - BIND

↓

STEP040 - TESTES

↓

STEP050 - GERA PACOTE

↓

STEP060 - ENVIA QA

↓

STEP070 - AGUARDA APROVAÇÃO

↓

STEP080 - PRODUÇÃO

Isso...

é praticamente um pipeline CI/CD.

A diferença é que hoje tudo pode ser disparado automaticamente por um simples:

git push

Continuous Integration

O nome já explica.

Toda alteração feita pelos desenvolvedores é integrada continuamente ao projeto principal.

Ao invés de esperar um mês...

integra-se várias vezes ao dia.

Isso reduz conflitos gigantes.


O maior inimigo do COBOL não é o compilador

É isto.

Dois programadores alterando o mesmo COPYBOOK.

Imagine:

CLIENTE.cpy

José altera:

01 CLIENTE.
   05 CPF.

Maria altera:

01 CLIENTE.
   05 EMAIL.

Carlos altera:

01 CLIENTE.
   05 SCORE.

Quem vence?

Antes...

quem compilava por último.

Hoje...

Git resolve conflitos.

Pipeline verifica impacto.

Testes garantem funcionamento.


Continuous Delivery

Depois que tudo foi integrado...

vem a entrega.

O software fica pronto para produção.

Observe a diferença.

Continuous Integration

Integra constantemente.

Continuous Delivery

Entrega constantemente.

Continuous Deployment

Entrega automaticamente em produção.

Nem todo banco permite Deployment automático.

Mas Delivery...

cada vez mais.


O pipeline invisível

Imagine uma esteira.

Programador

↓

Git

↓

Pipeline

↓

Compilação

↓

Testes

↓

Qualidade

↓

Empacotamento

↓

Homologação

↓

Produção

O desenvolvedor apenas envia código.

Todo o resto acontece sozinho.


Onde entra o Docker?

Aqui existe um mito enorme.

Muitos imaginam:

"Mainframe usa Docker."

Na maioria dos casos...

não.

O IBM Z executa z/OS.

Docker normalmente roda em Linux.

Mas isso não significa que eles não trabalhem juntos.

Na verdade...

trabalham diariamente.


O Docker do Coboleiro

Imagine que você possui uma aplicação composta por:

Frontend React

↓

API Java

↓

Kafka

↓

Redis

↓

PostgreSQL

↓

Mainframe

Toda essa parte distribuída pode rodar em Docker.

Enquanto isso...

o COBOL continua rodando no z/OS.


O pipeline moderno

Git

↓

Docker

↓

Compila Java

↓

Executa Testes

↓

Sobe Banco

↓

Executa APIs

↓

Integra com Mainframe

↓

Executa Testes End-to-End

↓

Entrega

O COBOL faz parte da cadeia.

Mesmo sem estar dentro do container.


Easter Egg para Coboleiros

Docker lembra muito...

JCL PROC.

Pense nisso.

Uma PROC define um ambiente reutilizável.

Docker Image também.

PROC:

IEFBR14

SORT

IDCAMS

IKJEFT01

Docker Image:

Ubuntu

Python

Java

Node

Maven

Nos dois casos...

alguém preparou um ambiente padrão.

Você apenas reutiliza.


Outro Easter Egg

Um Container é quase como um JOB temporário.

Ele nasce.

Executa.

Produz resultado.

Morre.

Exatamente como milhares de jobs batch.


E mais um...

Imagem Docker lembra LOADLIB.

Você cria uma imagem.

Depois apenas executa.

Muito parecido com um módulo compilado.


Como um coboleiro trabalha hoje?

Imagine o dia.

8:00

Atualiza Git.

git pull

8:15

Altera COBOL.


9:10

Executa testes locais.


9:20

Commit.

git commit

9:21

Push.

git push

Nesse instante...

o pipeline começa.

Sem perguntar nada.


O pipeline executa

  • checkout

  • download

  • compilação

  • COBOL Check

  • SonarQube

  • testes

  • ZUnit

  • quality gate

  • geração de pacote

  • upload

Tudo automático.


Enquanto isso...

O desenvolvedor toma café.


Ambientes

Uma empresa normalmente possui:

DEV

↓

SIT

↓

QA

↓

UAT

↓

PRE-PROD

↓

PROD

Cada ambiente possui:

  • Db2

  • CICS

  • MQ

  • datasets

  • usuários

  • certificados

  • APIs

  • filas

Tudo diferente.

O pipeline controla isso.


O maior erro dos iniciantes

Achar que DEV é igual PROD.

Nunca é.

Produção possui:

  • volume

  • segurança

  • criptografia

  • RACF

  • WLM

  • políticas

  • auditoria

  • SMF

  • monitoramento


O pipeline reduz erros humanos

Antes alguém precisava:

  • copiar módulos

  • alterar datasets

  • trocar parâmetros

  • executar binds

  • atualizar packages

Hoje...

scripts fazem isso.

Muito menos erro.


Como identificar que sua empresa precisa evoluir?

Existem alguns sinais.

Compilação manual

Ainda existe alguém clicando em dezenas de telas.

Pode automatizar.


Testes manuais

Tudo depende de pessoas.

Pode automatizar.


Deploy manual

Alguém copia LOADLIB.

Pode automatizar.


Sem Git

Problema sério.


Sem versionamento

Outro problema.


Sem rollback

Problema gravíssimo.


Como evoluir?

Não tente implantar tudo.

Comece pequeno.

Primeiro:

Git.

Depois:

Build automático.

Depois:

Testes.

Depois:

Qualidade.

Depois:

Deploy.

Depois:

Observabilidade.


Ferramentas comuns

No mundo distribuído:

  • GitHub

  • GitLab

  • Jenkins

  • Azure DevOps

  • GitHub Actions

  • Bamboo

  • TeamCity

No mundo IBM Z:

  • IBM Dependency Based Build (DBB)

  • UrbanCode Deploy

  • IBM Developer for z/OS

  • Zowe CLI

  • z/OSMF

  • IBM Wazi

  • IBM Test Accelerator

  • IBM Application Delivery Foundation

Cada uma resolve uma parte do quebra-cabeça.


Docker no dia a dia do coboleiro

Mesmo que você nunca execute um container...

provavelmente usa algo que foi criado por ele.

Exemplos:

VS Code Dev Container.

SonarQube.

Jenkins.

Nexus.

Artifactory.

Mongo.

Redis.

RabbitMQ.

Kafka.

Prometheus.

Grafana.

Tudo frequentemente hospedado em containers.


O pipeline conversa com o Mainframe

Hoje isso acontece usando:

  • SSH

  • FTP seguro

  • SFTP

  • Zowe CLI

  • REST APIs

  • z/OSMF

  • MQ

  • Connect:Direct

  • Ansible

Ou seja...

o pipeline não precisa morar no z/OS.

Ele apenas conversa com ele.


Os perigos

Automação ruim acelera erros.

Existe uma frase famosa.

"Se você automatizar um processo ruim, apenas conseguirá errar muito mais rápido."

Um pipeline mal configurado pode:

  • apagar datasets

  • publicar versão errada

  • executar BIND incorreto

  • substituir módulos

  • gerar indisponibilidade

Automação exige governança.


Fraquezas

CI/CD não resolve:

má arquitetura.

código ruim.

COPYBOOK gigante.

programa de 70 mil linhas.

GOTO infinito.

IF aninhado em vinte níveis.

Tudo isso continua existindo.

Apenas chega mais rápido à homologação.


As vantagens

São enormes.

Menos erro humano.

Mais rastreabilidade.

Rollback simples.

Auditoria.

Histórico.

Segurança.

Qualidade.

Velocidade.

Repetibilidade.

Padronização.

Confiança.


Curiosidades

Os bancos mais modernos executam milhares de pipelines por dia.

Alguns pipelines levam poucos minutos.

Outros...

compilam milhares de programas COBOL.

Há pipelines que analisam impacto em centenas de COPYBOOKS antes mesmo da compilação.

Outros verificam automaticamente se um programa alterou SQL estático e disparam o BIND apenas quando necessário.

Em muitas instituições, uma alteração em um COPYBOOK crítico dispara uma análise de dependências para descobrir todos os programas afetados, permitindo recompilar somente o necessário em vez de reconstruir toda a aplicação.

Também é comum que o pipeline consulte políticas de segurança: se um desenvolvedor tentar promover um módulo diretamente para produção sem as aprovações exigidas, a entrega é bloqueada automaticamente.


CI/CD e a mentalidade do Padawan

O maior aprendizado para quem está começando não é decorar nomes de ferramentas.

É entender que o código deixou de ser um arquivo isolado. Ele faz parte de um ecossistema.

Quando você altera uma linha em um programa COBOL, essa mudança pode disparar:

  • validação de sintaxe;

  • análise de qualidade;

  • execução de testes unitários;

  • testes de integração;

  • análise de impacto em COPYBOOKs;

  • geração de métricas;

  • publicação de artefatos;

  • implantação em ambientes de teste.

Você continua escrevendo COBOL, mas agora trabalha em uma cadeia de entrega muito maior.


Uma analogia para nunca esquecer

Imagine uma fábrica de automóveis.

O programador COBOL fabrica uma peça do motor.

O CI/CD é a esteira de montagem.

Ele verifica se a peça está correta, mede suas dimensões, confirma a compatibilidade com as demais peças, registra quem a produziu, armazena o histórico e só então permite que ela siga para a próxima etapa.

Sem essa esteira, cada carro dependeria de verificações totalmente manuais.

Com ela, a produção ganha velocidade, qualidade e previsibilidade.

No mundo IBM Z acontece exatamente a mesma coisa.

O COBOL continua sendo o coração do processamento de negócios. O JCL continua orquestrando cargas batch. O CICS continua atendendo milhões de transações. O Db2 continua armazenando dados críticos. O que mudou foi a forma de construir, validar e entregar essas aplicações.

No fim das contas, o CI/CD não substitui o conhecimento do coboleiro. Pelo contrário: ele amplia seu alcance. O profissional que entende Git, pipelines, testes automatizados, Docker (mesmo que apenas como parte da infraestrutura), Zowe, automação de builds e integração entre ambientes torna-se capaz de participar de projetos modernos sem abandonar a robustez do mainframe.

E talvez esse seja o maior segredo do IBM Z em 2026: o mainframe não ficou preso ao passado. Ele incorporou práticas modernas de engenharia de software e continua evoluindo. O padawan que aprende essa mentalidade deixa de ser apenas um programador COBOL e passa a enxergar toda a jornada do software — desde o primeiro git push até o momento em que um módulo é promovido para produção com segurança, rastreabilidade e confiança. Afinal, no universo Bellacosa Mainframe, escrever código é apenas o começo; entregar software de forma consistente é o verdadeiro diferencial.

Sem comentários:

Enviar um comentário