Configurando uma pipeline
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.
Entendendo o TCE.Templates
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.
- Para configurar seu repositório nos padrões do Docker, veja: Como Configurar meu projeto com Docker.
- Para configurar seu repositório para deploy no Cluster Kubernetes, veja: Como Configurar meu projeto com Kubernetes
As pipelines mínimas possuem configurações que todos os repositórios deveriam ter, atualmente elas se resumem a:
- Versionamento Automático
- Deploy Automático
(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
Importando um modelo de pipeline
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:
versioningdeploy
E 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.
Ajustar a <version>
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
Environments
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.
Versioning
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.
Deploy Docker
O job deploy-docker irá realizar o deploy em um servidor rodando docker. Para configurar ele é bem simples:
- Indique qual é o arquivo
docker-compose.ymlpara produção e qual é para homologação na inputcompose-file: - Acesse a Lista de Runners Docker (ou Lista de Runners - Gitlab).
- Encontre qual é a Tag do servidor que você deseja fazer deploy.
- Por exemplo, em homologação queremos fazer deploy no servidor:
Docker Staging Serverouvmdocker-02.tce.go.gov.br. Então é:tag: docker-stag-runner - Em produção, queremos fazer no
Docker Production Server, ouvmdocker-01.tce.go.gov.br. Então é:tag: dockers-prod-runner
Fazendo push
Feito isso, pode fazer push e ser feliz a pipeline deve estar pronta.