Como criar uma pipeline de CI/CD
Como dito antes, o repositório TCE.Templates foi criado para encapsular a implementação dos jobs e das pipelines.
Para implementar uma pipeline padrão em seu projeto, basta acessar o TCE.Templates. Iremos tomar como base a versão mais recente do repositório atualmente, versão 3.0.0.
No TCE.Templates há 4 exemplos de pipelines: - Pipeline Docker Mínima - Pipeline Kubernetes Mínima - Pipeline Docker Completa - Pipeline Kubernetes Completa
As pipelines Docker, realizam deploy através do docker, e as pipelines Kubernetes realizam deploy através do Kubernetes.
As pipelines mínimas possuem configurações que todos os repositórios deveriam ter, atualmente elas se resumem a:
(Com exceção de repositórios onde não há deploy, ex: bibliotecas)
Já as pipelines completas também possuem: - Lints - Testes - Integração com o Sonar
Para implementar uma pipeline, basta acessar o TCE.Templates, escolher sua pipeline no sumário, neste exemplo iremos implementar a pipeline-docker-minimal.
Veja que ele possui 2 stages:
versioningdeployE 4 includes: - Versionamento Produção - Versionamento Homolog - Deploy Docker Produção - Deploy Docker Homolog
Cada um desses includes são CI/CD Components que implementam um Job na pipeline.
Você pode ver a documentação deles no próprio TCE.Templates: Versioning Job e Deploy-Docker.
Cada um dos components possui uma tag @<version> no final. Você deve substituir a versão de todos os components pela versão mais recente da biblioteca. Em nosso caso, é a versão 3.0.0 que fica: - component: $CI_SERVER_FQDN/GER-TI/tce.kubernetes/tce.templates/deploy-docker@3.0.0.
Nota: Nunca use@main, prefira sempre pinnar sua pipeline a uma versão específica. Dessa forma, se sua pipeline funciona, ela semop
Todos os Components possuem uma palavra chave environment. Quando environment: production, esse job será executado quando houver push na main/master, quando for environment: homolog, será executado na develop/homolog.
O job Versioning é o job responsável por realizar o versionamento do repositório. Se você leu sobre Como nomear Commits?, já sabe o que vem a seguir. O job irá rodar o semantic_release, o qual irá ler o nome do último commit, decidir se uma alteração Major, Minor ou um Patch, e criar uma nova versão. Ele vai criar uma Tag automaticamente no padrão de Versionamento Semântico.
Esse job é bem padrão e não é necessário alterar nada.
O job deploy-docker irá realizar o deploy em um servidor rodando docker. Para configurar ele é bem simples:
docker-compose.yml para produção e qual é para homologação na input compose-file:Docker Staging Server ou vmdocker-02.tce.go.gov.br. Então é: tag: docker-stag-runnerDocker Production Server, ou vmdocker-01.tce.go.gov.br. Então é: tag: dockers-prod-runner
Feito isso, pode fazer push e ser feliz a pipeline deve estar pronta.