Ferramentas para Versionamento de
Código e Integração Contínua
Agenda
1
Introdução a gerenciamento de versão
2
Conceitos sobre integração contínua, deploy contínuo e entrega contínua
3
Utilização do Git
4
Ferramentas para integração contínua
#0 ApresentaçãoQuem sou?

#1 Introdução a gerenciamento de versão
O que é uma versão?
#1 Introdução a gerenciamento de versão
O que é uma versão?
Alterar, entornar, mudar
#1 Introdução a gerenciamento de versão
O que é uma versão?
Alterar, entornar, mudar
O que é Gerenciamento?
Ato de administrar, dirigir
#1 Introdução a gerenciamento de versão
Gerenciamento de versão é?
Ato de administrar ou dirigir mudanças
#1 Introdução a gerenciamento de versão
Sistema que registra alterações em arquivos ao longo do tempo para que versões específicas possam ser recuperadas posteriormente.
Controle de Versão

#1 Introdução a gerenciamento de versão
Sistema de controle de versões:
- VCS (do inglês version control system)
-
SCM (do inglês source code management)
Nomeclaturas

#1 Introdução a gerenciamento de versão
Nós versionamos apenas código?
Esses sistemas são comumente utilizados no desenvolvimento de software para controlar as diferentes versões — histórico e desenvolvimento — dos códigos-fontes e também da documentação.
#1 Introdução a gerenciamento de versão
#1 Introdução a gerenciamento de versão
História
Source Code Control System (SCCS)
Marc Rochkind desenvolveu o SCCS em SNOBOL4 no Bell Labs para um computador IBM System/370 rodando OS/360 MVT
* Código proprietário
1972
1982
Revision Control System (RCS)
Lançado por Walter F. Tichy, enquanto ele estava na Universidade de Purdue, como uma alternativa livre e mais evoluída para o então popular Source Code Control System (SCCS)
* Código aberto
86-90
Concurrent Version System (CVS)
Dick Grune "Criei o CVS para poder cooperar com meus alunos Erik Baalbergen e Maarten Waage no ACK (Amsterdam Compiler Kit) Compilador C."
* Código aberto
#1 Introdução a gerenciamento de versão
História
1972 - SCCS
1982 - RCS
86-90 - CVS
Subversion (SVN)
Fundado pela CollabNet, Inc., o projeto e o software Subversion tiveram um sucesso incrível na última década.
* Código aberto
2000
2000
BitKeeper SCM
é um sistema de controle de versão distribuído, o primeiro beta utilizável estava disponível em Maio de 1999 e em 4 de Maio de 2000, o primeiro lançamento público do BitKeeper se fez disponível
* Código aberto
2005
Mercurial
é uma ferramenta multiplataforma de controle de versão distribuído para desenvolvedores de software. O criador e desenvolvedor líder do Mercurial é o Matt Mackall
* Código aberto
#1 Introdução a gerenciamento de versão
- Reverter estados
- Comparar mudanças
- Modificações (identificar causas e quem ocasionou)
- Quando foram introduzidos problemas
Benefícios

#1 Introdução a gerenciamento de versão
Benefícios




Text

Control de Histórico e Rastreabilidade
Confiança
Trabalho em Equipe
Marcação e Ramificação
Organização
Projetos de Software
Projetos de UX
Documentação
Estáticos de Site
Gestão de Projetos de Engenharia
Escrita de Livros e Publicações
DevOps e Integração Contínua (CI/CD)
Aplicações
#1 Introdução a gerenciamento de versão
Projetos de Software
Projetos de UX
Documentação
Estáticos de Site
Gestão de Projetos de Engenharia
Escrita de Livros e Publicações
DevOps e Integração Contínua (CI/CD)
Aplicações
#1 Introdução a gerenciamento de versão
Equipes de desenvolvedores podem trabalhar simultaneamente no mesmo projeto, cada um em suas próprias "ramificações" (branches), sem conflito.
Projetos de Software
Projetos de UX
Documentação
Estáticos de Site
Gestão de Projetos de Engenharia
Escrita de Livros e Publicações
DevOps e Integração Contínua (CI/CD)
Aplicações
#1 Introdução a gerenciamento de versão
Autores e editores podem rastrear diferentes versões de um manuscrito, identificando mudanças, correções e revisões.
Projetos de Software
Projetos de UX
Documentação
Estáticos de Site
Gestão de Projetos de Engenharia
Escrita de Livros e Publicações
DevOps e Integração Contínua (CI/CD)
Aplicações
#1 Introdução a gerenciamento de versão
Utilizado para rastrear alterações em documentos de projeto, especificações técnicas e manuais.
Diversas pessoas podem editar simultaneamente sem sobrescrever o trabalho de outras, comum em redação colaborativa de papers e relatórios.
Projetos de Software
Projetos de UX
Documentação
Estáticos de Site
Gestão de Projetos de Engenharia
Escrita de Livros e Publicações
DevOps e Integração Contínua (CI/CD)
Aplicações
#1 Introdução a gerenciamento de versão
Engenheiros podem usar sistemas de controle de versão para arquivos CAD, gerando diferentes versões de projetos mecânicos ou arquitetônicos.
Projetos de Software
Projetos de UX
Documentação
Estáticos de Site
Gestão de Projetos de Engenharia
Escrita de Livros e Publicações
DevOps e Integração Contínua (CI/CD)
Aplicações
#1 Introdução a gerenciamento de versão
Designers podem usar controle de versão para gerir diferentes versões de arquivos de design (ex: PSD, AI), permitindo a recuperação de trabalhos anteriores.
Projetos de Software
Projetos de UX
Documentação
Estáticos de Site
Gestão de Projetos de Engenharia
Escrita de Livros e Publicações
DevOps e Integração Contínua (CI/CD)
Aplicações
#1 Introdução a gerenciamento de versão
Sistemas como Jenkins, GitHub Actions, GitLab CI, ou Travis CI usam controle de versão para automatizar testes, builds e deploys contínuos.
Projetos de Software
Projetos de UX
Documentação
Estáticos de Site
Gestão de Projetos de Engenharia
Escrita de Livros e Publicações
DevOps e Integração Contínua (CI/CD)
Aplicações
#1 Introdução a gerenciamento de versão
Para conteúdos de sites estáticos utiliza-se controle de versão para facilmente verificar o que está presente de conteúdo e em casos específicos retornar versões ou até mesmo avançar versões.
Sistemas Locais de Versão
#1 Introdução a gerenciamento de versão

Um Sistema Local de Versionamento armazena o histórico de alterações de arquivos em um único computador, permitindo que o desenvolvedor rastreie versões, faça alterações e reverta mudanças.
Sistemas Locais de Versão
#1 Introdução a gerenciamento de versão

Quais vantagens e problemas possuímos nesse sistema?
Sistemas Locais de Versão
#1 Introdução a gerenciamento de versão
Colaboração Limitada
Escalabilidade Reduzida
Risco de Perda de Dados
Gerenciamento de Conflito Manual
Falta de Integração com CI/CD
Acesso Remoto Impossível
Histórico Local Incompleto
Falta de Transparência

Sistemas Locais de Versão
#1 Introdução a gerenciamento de versão
Simplicidade
Independência de Conexão
Desempenho
Custo Zero
Privacidade
Uso em Projetos Simples ou Temporários

Sistemas Locais de Versão
#1 Introdução a gerenciamento de versão
Atividade 1
- Siga as instruções no link.
- Tome nota das dificuldades enfrentadas na atividade.

10 Minutos
Sistema Centralizado de Versão (CVCS)
#1 Introdução a gerenciamento de versão
Um Sistema Centralizado de Controle de Versão (CVCS) armazena todo o histórico de versões e arquivos em um servidor central. Desenvolvedores fazem checkout do código diretamente desse servidor, e todas as alterações (commits) são registradas centralmente.

#1 Introdução a gerenciamento de versão
Quais vantagens e problemas possuímos nesse sistema?
Sistema Centralizado de Versão (CVCS)

#1 Introdução a gerenciamento de versão
Dependência do Servidor Central
Menor Flexibilidade
Risco de Falha no Servidor
Dificuldade de Trabalho Offline
Escalabilidade Limitada

Sistema Centralizado de Versão (CVCS)
#1 Introdução a gerenciamento de versão
Controle Centralizado
Fácil Controle de Acesso
Simplicidade de Configuração
Visão Unificada do Repositório
Histórico Centralizado e Seguro

Sistema Centralizado de Versão (CVCS)
#1 Introdução a gerenciamento de versão
Exemplos de CVCSs



#1 Introdução a gerenciamento de versão
Criando um CVCSs com SVN + Docker
version: '3.8'
services:
svn:
image: garethflowers/svn-server:latest
container_name: svn-server
ports:
- "3690:3690" # Porta padrão do SVN
volumes:
- ./svn-repos:/var/opt/svn # Mapeamento do repositório SVN local
environment:
- SVN_REPOS=/var/opt/svn
- SVN_USER=admin # Usuário admin do SVN
- SVN_PASSWORD=admin # Senha para o usuário admin
restart: alwaysO servidor SVN estará disponível em svn://localhost:3690. O repositório será armazenado na pasta ./svn-repos localmente no host.
#1 Introdução a gerenciamento de versão
Configurando um repositório com SVN + Docker
# Para criar um repositório
docker exec -it svn-server svnadmin create repositorio-xpto
# Para acessar o container com o server
docker exec -it svn-server sh
# Configurar usuários
## Edite o arquivo svnserve.conf para habilitar autenticação e definir permissões:
nano /var/opt/svn/<nome_do_repositorio>/conf/svnserve.conf
[general]
anon-access = none # Bloqueia acesso anônimo
auth-access = write # Habilita acesso com autenticação
password-db = passwd # Arquivo de usuários e senhas
authz-db = authz # Arquivo de controle de acessos
## Configurando usuários e senhas
nano /var/opt/svn/<nome_do_repositorio>/conf/passwd
[users]
joao = senha123
maria = senha456
vanilton = 123456#1 Introdução a gerenciamento de versão
Configurando um repositório com SVN + Docker
# Configurar permissões
## Edite o arquivo svnserve.conf para habilitar autenticação e definir permissões:
nano /var/opt/svn/<nome_do_repositorio>/conf/authz
[groups]
devs = joao, maria # Define um grupo chamado "devs"
[/]
* = # Bloqueia o acesso de todos os usuários
vanilton = r # Usuário específico com acesso somente leitura
@devs = rw # Grupo "devs" tem leitura e escrita#1 Introdução a gerenciamento de versão
Customizando sua imagem com SVN + Docker
#Dockerfile
# Use a imagem base de garethflowers/svn-server
FROM garethflowers/svn-server:latest
# Instale o nano
RUN apk update && apk add nano#1 Introdução a gerenciamento de versão
Criando um CVCSs com SVN Windows
https://www.visualsvn.com/downloads/

#1 Introdução a gerenciamento de versão
Configurando um CVCSs com VisualSVN Server

- Criar um usuário
- Criar um repositório permitindo ao usuário criado no passo 1 ter acesso de leitura e escrita
#1 Introdução a gerenciamento de versão
Acessando o repositório criado no VisualSVN Server

#1 Introdução a gerenciamento de versão
Instalando um Cliente SVN

#1 Introdução a gerenciamento de versão
Terminologias
O local central onde todo o código-fonte e histórico de versões de um projeto são armazenados.
#1 Introdução a gerenciamento de versão
Um commit no contexto destes sistemas de controle de versão refere-se a submeter as últimas alterações do código fonte ao repositório e tornar estas alterações parte da versão principal (head) do repositório.
Terminologias
#1 Introdução a gerenciamento de versão
Terminologias
Branch (Ramo): Uma linha paralela de desenvolvimento, permitindo que diferentes versões de um projeto coexistam. Branches são usados para desenvolver novos recursos ou corrigir bugs sem afetar o código principal.
#1 Introdução a gerenciamento de versão
Merge: O processo de integrar as alterações de uma branch a outra. Em geral, o merge une as modificações de uma branch secundária ao branch principal.
Terminologias
#1 Introdução a gerenciamento de versão
Terminologias
Tag: Um marcador para identificar versões específicas no repositório, como uma versão de lançamento (v1.0, v2.0 etc.). Diferente das branches, as tags são usadas como pontos fixos, sem intenção de novas alterações.
#1 Introdução a gerenciamento de versão
Checkout: Ação de copiar o código de uma versão específica do repositório para uma máquina local, permitindo ao usuário editar e visualizar o código em uma versão selecionada.
Terminologias
#1 Introdução a gerenciamento de versão
Terminologias
Conflict (Conflito): Ocorre quando alterações conflitantes são feitas na mesma linha de código por diferentes colaboradores. Normalmente, é necessário resolver conflitos manualmente durante um merge.
#1 Introdução a gerenciamento de versão
Diff: Uma comparação entre duas versões do código para destacar o que foi adicionado, removido ou alterado.
Terminologias
#1 Introdução a gerenciamento de versão
Terminologias
Blame: Uma funcionalidade que permite visualizar qual usuário fez mudanças específicas em linhas de código. Útil para rastrear o autor e a data de uma modificação.
#1 Introdução a gerenciamento de versão
Revert: Ação de desfazer uma ou mais alterações no código. Pode ser usada para voltar o código a um estado anterior sem remover completamente o histórico.
Terminologias
#1 Introdução a gerenciamento de versão
Terminologias
Log: Exibe o histórico de modificações de um dado repositório contendo informações como descrição de commits, data e hora e nome do responsável pelas versões.
#1 Introdução a gerenciamento de versão
Staging Area (ou Index): Um espaço onde as mudanças são preparadas antes do commit. O usuário seleciona quais mudanças deseja enviar ao repositório, permitindo controle sobre o que é incluído no próximo commit.
Terminologias
#1 Introdução a gerenciamento de versão
Atividade 2
- Siga as instruções no link.
- Tome nota das dificuldades enfrentadas na atividade.

45 Minutos
Sistema Centralizado de Versão (CVCS)
#1 Introdução a gerenciamento de versão
Em um DVCS os clientes não somente usam o estado mais recente dos arquivos: eles duplicam localmente o repositório completo.

Sistema Distribuídos de Versão (DVCS)
#1 Introdução a gerenciamento de versão
Desta maneira, se qualquer servidor morrer, e diversas pessoas estiverem colaborando por meio de um sistema distribuído de controle de versão, qualquer um dos repositórios de clientes podem ser copiado de volta para o servidor para restaurá-lo.
Sistema Distribuídos de Versão (DVCS)

#1 Introdução a gerenciamento de versão
Podemos afirmar que cada clone de repositório é, de fato, um backup completo de todos os dados.
Sistema Distribuídos de Versão (DVCS)

#1 Introdução a gerenciamento de versão
Complexidade Inicial
Menor Flexibilidade
Risco de Falha no Servidor
Dificuldade de Trabalho Offline
Escalabilidade Limitada

Sistema Distribuídos de Versão (DVCS)
#1 Introdução a gerenciamento de versão
Quais vantagens e problemas possuímos nesse sistema?
Sistema Distribuídos de Versão (DVCS)

#1 Introdução a gerenciamento de versão
Exemplos de DVCSs






#1 Introdução a gerenciamento de versão
Instalando Git

#1 Introdução a gerenciamento de versão
Instalando Clientes Git

#1 Introdução a gerenciamento de versão
Terminal
Windows



iTerm

Terminator
#1 Introdução a gerenciamento de versão
Git - História
Git é um sistema de controle de versões distribuído, usado principalmente no desenvolvimento de software, mas pode ser usado para registrar o histórico de edições de qualquer tipo de arquivo.
O Git foi baseado na ferramenta proprietária chamada BitKeeper
#1 Introdução a gerenciamento de versão
Git - História

- Linus criador do Git
- O termo "Git", uma gíria em inglês britânico para cabeça dura, pessoas que acham que sempre têm razão, argumentativas, podendo ser também pessoa desagradável ou estúpida
"Eu sou um desgraçado egocêntrico, então batizo todos os meus projetos com meu nome. Primeiro Linux, agora Git."
— Linus Torvalds
#1 Introdução a gerenciamento de versão
Git - Licença

- O Git é um software livre, distribuído sob os termos da versão 2 da GNU General Public License. Sua manutenção é atualmente supervisionada por Junio Hamano (Engenheiro de software e hacker).
#1 Introdução a gerenciamento de versão
Git - Portabilidade
- O Git foi primariamente desenvolvido para Linux, mas pode ser usado em outros sistemas operacionais baseados no Unix, incluindo o BSD, o Solaris e o Darwin. O Git é extremamente rápido em arquiteturas POSIX como o Linux.
O Git também roda no Microsoft Windows.

#1 Introdução a gerenciamento de versão
Git - Quem usa?


#1 Introdução a gerenciamento de versão
Git - Estrutura
Todo o controle de versão realizado localmente.
#1 Introdução a gerenciamento de versão
Git - Estrutura
Processo de sincronização entre repositório local e remoto e vice versa.
#1 Introdução a gerenciamento de versão
Git - Estrutura
Utilizado para alternar entre branchs, restaurar arquivos ou recuperar uma versão específica de um arquivo ou commit.
#1 Introdução a gerenciamento de versão
Git - Estrutura

#1 Introdução a gerenciamento de versão
Git - Vantagens
Open
Source
Trabalho em Equipe
Controle de histórico
Autonomia
Ramificação do Projeto

Segurança
Organização
Repositórios reduzidos
#1 Introdução a gerenciamento de versão
Sistema de Controle Convencional
- Versões dos arquivos são armazenadas sequencialmente como deltas (Δ)
- Δ representa as diferenças ou modificações incrementais feitas nos arquivos.

#1 Introdução a gerenciamento de versão
Sistema de Controle no Git
- O Git guarda uma versão completa do repositório, mas otimiza o armazenamento armazenando apenas os arquivos que realmente mudaram

#1 Introdução a gerenciamento de versão
Snapshot
- Cada commit (bolinha azul) no Git é, na verdade, um snapshot de todos os arquivos no projeto naquele momento. Assim, cada commit mantém um histórico completo do projeto.

#1 Introdução a gerenciamento de versão
Estratégia
O formato do objeto dos arquivos de repositório do Git usa uma combinação de codificação delta (armazenamento de diferenças de conteúdo)


v1
src/code.py
work
src/code.py
#1 Introdução a gerenciamento de versão
Os 3 estados

Prepara
Valida
Envia para o git
#1 Introdução a gerenciamento de versão
Conceitos de Git
Atividade 3
- Siga as instruções no link.
- Tome nota das dificuldades enfrentadas na atividade.

60 Minutos
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
O que é Integração Contínua (CI)?
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
O que é Integração Contínua (CI)?
Entregar continuamente, ou a cada commit
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
O que é Integração Contínua (CI)?
Integração Contínua geralmente se refere à integração, construção e teste de código dentro do ambiente de desenvolvimento. Entrega Contínua se baseia nisso, lidando com os estágios finais necessários para a implantação da produção.
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
O que não se quer com CI?
Picos de integrações
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
O que se quer com CI?
Cadência curta nas integrações
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Organização de repositórios
Multi-repositório
Mono-repositório
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Estratégia e modelos de Branch
Todos se comprometem com a linha principal todos os dias - Martin Fowler
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Pontos de atenção
Commits com foco em tarefas e simples
Muitas branches atrasam a integração
Branches curtas menor complexidade no merge
Quanto mais branches mais burocracia nas integrações
Mais que a decisão de um é o time que define o seu padrão
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Feature Branch
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Feature Branch e Pull Request
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Git Flow
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Git Flow
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Evitando branches de vida longa
Feature Flag
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Evitando branches de vida longa
Branch Abstraction
O importante é manter o trunk vivo
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Estratégia de merge
Merge
Rebase
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Estratégia de merge
Merge
Rebase
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Estratégia de merge
Merge
Rebase
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
O que não pode faltar no CI?
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Teste Automatizado

Lento
Rápido
$$$
$
# de testes
- Automação de API
- Contrato ou Mock
- Unitário
- Automação Funcional
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Teste Automatizado - TDD
2. Executar o Teste
- Esperar a falha
1. Escrever um Teste para uma entidade
3. Implementar o código fonte
- Mínimo Necessário
4. Rodar o Teste Novamente
- Esperar o teste passar
Iterar e Refinar

#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Teste Automatizado - TDD - Benefícios
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Teste Automatizado - TDD - Atividade 4
1. Considerando o contexto ao lado crie a estrutura de um projeto python abaixo:
ecommerce/
├── src/
│ ├── __init__.py
│ ├── product.py
├── tests/
│ ├── __init__.py
│ ├── test_product.py2. Observe que foi criado um script para a entidade produto e outro para criar o teste de produto.
3. Crie uma classe de teste para produto, e dentro dela um teste que cubra a criação de um Produto contendo nome e preço. Utilize o framework de teste unittest do python.
4. Implemente a classe de Produto e faça o teste passar.
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
import unittest
from src.product import Product
class TestProduct(unittest.TestCase):
def test_create_product(self):
# Criamos um produto com nome e preço
product = Product(name="Laptop", price=1500.00)
# Verificamos se as propriedades foram atribuídas corretamente
self.assertEqual(product.name, "Laptop")
self.assertEqual(product.price, 1500.00)
def test_set_price_negative(self):
# Teste para verificar se o preço negativo é tratado
product = Product(name="Smartphone", price=500.00)
with self.assertRaises(ValueError):
product.set_price(-100.00)
if __name__ == '__main__':
unittest.main()class Product:
def __init__(self, name, price):
self.name = name
self.set_price(price)
def set_price(self, price):
if price < 0:
raise ValueError("O preço não pode ser negativo")
self.price = price#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Teste Automatizado - TDD X BDD


#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Resumo sobre Teste e CI
Testes devem ser rápidos na execução
Não existe Build sem teste
Priorize os teste que atendam mais valor
Utilize padrões de teste
Execute testes antes de cada commit
Categorizar os tipos de testes criados
Executar os testes rápidos primeiro
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Pipeline Automatizada
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Pipeline Automatizada
Contínuo a cada commit
Independência de IDE
Tudo que é necessário está no repo
Um comando tudo automatizado
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Ferramentas para automação e controle

| Linguagem | Ferramentas |
|---|---|
| Java | Ant, Maven, Gradle |
| Javascript | Gulp, Grunt, Webpack |
| .Net | MSBuild |
| Ruby | Rake |
| Kotlin | Gradle |
| Clojure | Leiningen |
| C/C++ | CMake/Make |
| PHP | Composer |
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Ferramentas para área de teste
| Ferramentas | Objetivo |
|---|---|
| Selenium, Playwright | Automação funcional |
| Cucumber | Teste de Aceitação |
| Postman | Teste de serviço (API) |
| Jmeter, Locust | Teste de Performance |
| Junit, xUnit, PyTest, Unitest | Teste unitário e controle de teste |

#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Pipeline Automatizada
Build rápido -> Feedback Rápido
Otimize o build
- Colete as métricas de execução
- Verifique as fases de análise de código e teste
- Utilize uma sequência que falhe rápido
- Verifique a infra do build do sistema
- Utilize cache
- TEN-Minute Build
- O objetivo do Ten-Minute Build é construir automaticamente todo o sistema e executar todos os testes em dez minutos. Os fundadores do XP sugeriram um período de 10 minutos porque se uma equipe tem um build que leva mais tempo do que isso, é menos provável que ele seja executado com frequência, introduzindo assim um tempo maior entre erros.
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
- Use ferramentas para automatizar o seu build
- Build deve ser independente da IDE
- Tudo que precisa estar no repositório
(install scripts, env settings, build scripts, config files, database files, code)] - Estrutura de diretórios bem definidos e conhecidos
- Builds rápidos que falham rápidos (10 minutos)
- Script único que construí para ambientes (parametrizado)
- Comando único de build (botão de build)
- Use build machine (Cl daemon)
Pipeline Automatizada - Resumindo
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
- De acordo com a documentação do Conventional Commits, commits semânticos são uma convenção simples para ser utilizada nas mensagens de commit. Essa convenção define um conjunto de regras para criar um histórico de commit explícito, o que facilita a criação de ferramentas automatizadas.
- Esses commits auxiliarão você e sua equipe a entenderem de forma facilitada quais alterações foram realizadas no trecho de código que foi commitado.
Padrões de Commit
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
- O commit semântico possui os elementos estruturais abaixo (tipos), que informam a intenção do seu commit ao utilizador(a) de seu código.
Tipos e descrição
feat - Commits do tipo feat indicam que seu trecho de código está incluindo um novo recurso (se relaciona com o MINOR do versionamento semântico).
fix - Commits do tipo fix indicam que seu trecho de código commitado está solucionando um problema (bug fix), (se relaciona com o PATCH do versionamento semântico).
docs - Commits do tipo docs indicam que houveram mudanças na documentação, como por exemplo no Readme do seu repositório. (Não inclui alterações em código).
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Tipos e descrição
build - Commits do tipo build são utilizados quando são realizadas modificações em arquivos de build e dependências.
perf - Commits do tipo perf servem para identificar quaisquer alterações de código que estejam relacionadas a performance.
test - Commits do tipo test são utilizados quando são realizadas alterações em testes, seja criando, alterando ou excluindo testes unitários. (Não inclui alterações em código)
style - Commits do tipo style indicam que houveram alterações referentes a formatações de código, semicolons, trailing spaces, lint... (Não inclui alterações em código).
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Tipos e descrição
chore - Commits do tipo chore indicam atualizações de tarefas de build, configurações de administrador, pacotes... como por exemplo adicionar um pacote no gitignore. (Não inclui alterações em código)
refactor - Commits do tipo refactor referem-se a mudanças devido a refatorações que não alterem sua funcionalidade, como por exemplo, uma alteração no formato como é processada determinada parte da tela, mas que manteve a mesma funcionalidade, ou melhorias de performance devido a um code review.
ci - Commits do tipo ci indicam mudanças relacionadas a integração contínua (continuous integration).
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Tipos e descrição
cleanup - Commits do tipo cleanup são utilizados para remover código comentado, trechos desnecessários ou qualquer outra forma de limpeza do código-fonte, visando aprimorar sua legibilidade e manutenibilidade.
raw - Commits do tipo raw indicam mudanças relacionadas a arquivos de configurações, dados, features, parâmetros.
remove - Commits do tipo remove indicam a exclusão de arquivos, diretórios ou funcionalidades obsoletas ou não utilizadas, reduzindo o tamanho e a complexidade do projeto e mantendo-o mais organizado.
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
| Tipo do commit | Emoji | Palavra-chave |
|---|---|---|
| Acessibilidade | ♿ :wheelchair: | |
| Adicionando um teste | ✅ :white_check_mark: | test |
| Atualizando a versão de um submódulo | ⬆️ :arrow_up: | |
| Retrocedendo a versão de um submódulo | ⬇️ :arrow_down: | |
| Adicionando uma dependência | ➕ :heavy_plus_sign: | build |
| Alterações de revisão de código | 👌 :ok_hand: | style |
| Animações e transições | 💫 :dizzy: | |
| Bugfix | 🐛 :bug: | fix |
| Comentários | 💡 :bulb: | docs |
| Commit inicial | 🎉 :tada: | init |
Padrões de emojis 💈
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Padrões de emojis 💈
| Tipo do commit | Emoji | Palavra-chave |
|---|---|---|
| Configuração | 🔧 :wrench: | chore |
| Deploy | 🚀 :rocket: | |
| Documentação | 📚 :books: | docs |
| Em progresso | 🚧 :construction: | |
| Estilização de interface | 💄 :lipstick: | feat |
| Infraestrutura | 🧱 :bricks: | ci |
| Lista de ideias (tasks) | 🔜 :soon: | |
| Mover/Renomear | 🚚 :truck: | chore |
| Novo recurso | ✨ :sparkles: | feat |
| Package.json em JS | 📦 :package: | build |
| Performance | ⚡ :zap: | perf |
| Refatoração | ♻️ :recycle: | refactor |
| Limpeza de Código | 🧹 :broom: | cleanup |
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Padrões de emojis 💈
| Tipo do commit | Emoji | Palavra-chave |
|---|---|---|
| Removendo um arquivo | 🗑️ :wastebasket: | remove |
| Removendo uma dependência | ➖ :heavy_minus_sign: | build |
| Responsividade | 📱 :iphone: | |
| Revertendo mudanças | 💥 :boom: | fix |
| Segurança | 🔒️ :lock: | |
| SEO | 🔍️ :mag: | |
| Tag de versão | 🔖 :bookmark: | |
| Teste de aprovação | ✔️ :heavy_check_mark: | test |
| Testes | 🧪 :test_tube: | test |
| Texto | 📝 :pencil: | |
| Tipagem | 🏷️ :label: | |
| Tratamento de erros | 🥅 :goal_net: | |
| Dados | 🗃️ :card_file_box: | raw |
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
- Comita diariamente o seu código na main do projeto?
- Você possui build e testes que rodam de modo automatizado?
- Quando existe um erro no build a equipe conserta em + ou - 10 minutos?
Checando integração contínua

#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
O que é Entrega Contínua (CD)?
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Release não apenas engenharia
Entrega contínua (Continuous Delivery)
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Entrega contínua (Continuous Delivery)

#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Entrega contínua (Continuous Delivery)

#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Prática de desenvolvimento que garante que o código sempre esteja pronto para ser lançado.
Entrega contínua (Continuous Delivery)

#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
O que é Deploy Contínuo (Continuous Deployment)?
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Extensão da entrega contínua, onde cada alteração aprovada é automaticamente implantada em produção.
Deploy Contínuo (Continuous Deploy)
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
- Todo código que passa nos testes automatizados é automaticamente implantado em produção.
- Elimina a etapa manual de aprovação.
- Necessita de monitoramento contínuo para garantir a estabilidade.
Deploy Contínuo (Continuous Deploy)
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Diferença entre Deploy Contínuo e CD
| Aspecto | Entrega Contínua | Deploy Contínuo |
|---|---|---|
| Objetivo | Código sempre pronto para produção | Implantação automática em produção |
| Automação | Até a etapa de release | Até a etapa de deploy |
| Controle | A aprovação final é manual | Sem intervenção manual |
| Frequência de Entrega | Alta | Muito alta |
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Diferença entre Deploy Contínuo e CD
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Deploy e seus problemas
- Gerenciamento manual de ambientes
- Ambientes diferentes de homologação ou produção
- Deploy Manual
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Deploy e seus problemas
- Gerenciamento manual de ambientes
- Ambientes diferentes de homologação ou produção
- Deploy Manual
- Deploy apenas no fim de um ciclo
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Deploy e seus problemas
- Gerenciamento manual de ambientes
- Ambientes diferentes de homologação ou produção
- Deploy Manual
- Deploy apenas no fim de um ciclo
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Deploy e como atuar nos problemas?
- Automatizar os pipelines por ambiente
- Tornar todo o deploy automatizado
- Realizar deploy com frequência durante o ciclo de desenvolvimento.
- Analisar e atualizar com frequência os scripts de infra
#2 Conceitos sobre integração contínua, deploy contínuo e entrega contínua
Atividade 5
Quizz
#3 Utilização do Git
A leitura da configuração é realizada de modo hierárquico
Primeiro aqui
Segundo aqui
Terceiro aqui
- /etc/gitconfig: válido para todos os usuários no sistema e todos os seus repositórios. Se você passar a opção --system para git config, ele lê e escreve neste arquivo.
- ~/.gitconfig ou ~/.config/git/config: Somente para o seu usuário. Você pode fazer o Git ler e escrever neste arquivo passando a opção --global.
- config no diretório Git (ou seja, .git/config) de qualquer repositório que você esteja usando: específico para este repositório.
Configuração Inicial do Git
#3 Utilização do Git
Perfil
- Abrir o git bash
- Criar uma pasta com nome "git"
- Acessar a pasta "git"
$ git config --list
credential.helper=osxkeychain
alias.tree=log --graph --decorate --pretty=oneline --abbrev-commit
core.excludesfile=/Users/vaniltonpinheiro/.gitignore_global
core.autocrlf=input
difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"
difftool.sourcetree.path=
mergetool.sourcetree.trustexitcode=true
user.name=Vanilton Pinheiro
user.email=vanilton.pinheiro@fpf.br
commit.template=/Users/vaniltonpinheiro/.stCommitMsg#3 Utilização do Git
Perfil - Identificando Usuário
$ git config --global user.name "Vanilton Pinheiro"
$ git config --global user.email vanilton.pinheiro@fpf.brImpacta no histórico do commit
Independe de como foi clonado o repositório ou se foi feito pull
E o que isso impacta?

#3 Utilização do Git
Alterando editor padrão
$ git config --global core.editor "nano"Que tal alterar o editor padrão utilizado pelo git?
#3 Utilização do Git
Alterando branch padrão
Vamos definir a branch padrão ao criar repositórios git
$ git config --global init.defaultBranch main#3 Utilização do Git
Ficou na dúvida do comando?


#3 Utilização do Git
Vamos criar nosso primeiro repositório git
- Criar uma pasta chamada "Project" dentro de nossa pasta git
- Acessar a pasta
$ git init

#3 Utilização do Git
Vamos configurar nosso primeiro repositório git
1. E se quisermos alterar uma configuração apenas para o repositório?
$ git config user.name "Vanilton de S. F. Pinheiro"As demais configurações serão do global
#3 Utilização do Git
Alterando outras configs do repositório local
Definir padrões para o repositório local
git config --local init.defaultBranch main
git config --local core.editor "code --wait"
caso não esteja no repositório
#3 Utilização do Git
Vamos configurar nosso primeiro repositório git
Branch (local)

Repositório git
#3 Utilização do Git
Versionando

#3 Utilização do Git
Vamos verificar o status do nosso repositório git
- nano README.md
- Escreva: Olá Mundo!
- Salve o arquivo

Estou na brach master
Nenhum commit ainda
Existe arquivos não rastreados
Arquivos identificados
Nada em Stage
#3 Utilização do Git
Brincando no Stage
Adicionando na Stage

Removendo da Stage
#3 Utilização do Git
Nosso primeiro commit

Agora temos o commit e o status não possui nada para comitar
Vamos testar apenas com "git commit"
#3 Utilização do Git
Visualizando o histórico de commit
Histórico de commits
Mensagem do commit
Utilizou o nome da configuração de perfil do projeto


Nosso primeiro ponto na árvore de commit
Commit Hash - SHA-1
#3 Utilização do Git
Visualizando o histórico de commit
$ git log --pretty=format:"%h - %an - %ar : %s"%h - Hash do commit abreviado
%an - Nome do Autor
%ar - Data relativa do commit
%s - Mensagem do commit
#3 Utilização do Git
Visualizando o histórico de commit
$ git log -3
$ git log --stat
$ git log --pretty=oneline --reverse
$ git log --pretty=oneline --reverse -2
$ git log --since=2.weeks
$ git log --since=2.days
$ git log --since=23.hourExperimente
#3 Utilização do Git
Restaurando alterações



Modificações desfeitas para a última versão comitada no repositório local
#3 Utilização do Git
Restaurando alterações do remoto

Modificações desfeitas para a última versão comitada no repositório remoto


#3 Utilização do Git
Comitando e adicionando junto e misturado

Altere o arquivo README.md conforme abaixo

Adiciona todos arquivos da área no commit
#3 Utilização do Git
Comitando e adicionando arquivos por expressão regular
$ git add *.md
$ git add git-*.sh
$ git add script/\*.js
$ git add arquivo1 arquivo2 arquivo3Inclui todos arquivos com extensão .md
Inclui todos arquivos iniciados por "git-" seguidos de qualquer texto e na extensão .sh
Inclui todos arquivos do diretório e subdiretórios script seguidos na extensão .js
Incluindo arquivos individualmente
#3 Utilização do Git
Corrigindo commit
- Corrigir antes do envio para remoto
- Corrigir após o envio para o remoto
git commit --amend
git commit --reset

#3 Utilização do Git
Corrigindo commit - amend
- Alterar o README.md com o conteúdo que desejar
- Adicionar o arquivo em Stage
Altere a mensagem do commit "Primeiro commit corrigido"
Verde (em Stage)



- Altera mensagem do commit
- Comitar o que está em stage
#3 Utilização do Git
Corrigindo commit - amend
- Vamos confirmar que o amend inclui o que está no stage
- Crie um novo arquivo chamado "nome.txt" na pasta do projeto
?? (Novo arquivo no repositório)
Obs: amend é sempre no último commit




#3 Utilização do Git
Reset
Redefine o HEAD atual para o estado especificado
1. git reset --mixed (default)
2. git reset --soft
3. git reset --hard
#3 Utilização do Git
Voltando versões
Duas maneiras simples
$ git reset HEAD~1 --soft
$ git checkout HASH_COMMIT Coloca o HEAD um commit atrás do atual (~1)
Iremos reforçar na seção de Interface Gráfica :)
Coloca o HEAD um commit atrás do atual
#3 Utilização do Git
Ignorando arquivos (não rastreando)
Vamos simular a necessidade de ignorar arquivos que não necessitam ser enviados para o repositório git.

Vamos criar uma pasta chamada libs e incluir dois arquivos nela.

Para ignorar vamos criar o arquivo .gitignore e definir o que gostariamos de ignorar

#3 Utilização do Git
Ignorando arquivos (não rastreando)

O .gitignore usa padrões globbing para fazer a comparação dos nomes de arquivos. Ex:
- **/logs - Padrão com um asterisco duplo para combinar diretórios em qualquer lugar no repositório.
- *.log - Um asterisco é um curinga que corresponde a zero ou mais caracteres.
- !important.log - Ignora um padrão
- debug[0-9].log - Colchetes podem ser usados para corresponder a um único caractere de um intervalo especificado.
#3 Utilização do Git
Ignorando arquivos (não rastreando)
Importante comitar o .gitignore


#3 Utilização do Git
Ignorando arquivos (não rastreando)
$ echo debug.log >> .gitignore
$ echo '*.txt' >> .gitignore
$ git rm --cached debug.log
rm 'debug.log'
$ git rm --cached nome.txt
rm 'nome.txt'
$ git add .gitignore
$ git commit -m "Ignorando debug.log e arquivos .txt"
Vamos criar os arquivos chamado debug.log e nome.txt, em seguida commitar
Vamos realizar o processo para remover.
#3 Utilização do Git
Vamos ver nosso histórico com mais detalhes
$ git log -p
$ git log -p -2 #últimos 2 commits
#3 Utilização do Git
Vamos ver nosso histórico com mais detalhes
$ git log --stat
$ git log -3 --stat #últimos 3 commits
#3 Utilização do Git
Vamos ver nosso histórico com mais detalhes
$ git log --graph --decorate --pretty=oneline --abbrev-commit
Dica: git config --global alias.tree "log --graph --decorate --pretty=oneline --abbrev-commit"
Cria um apelido para um outro comando
#3 Utilização do Git
Branch
Nota: git tree = "git log --graph --decorate --pretty=oneline --abbrev-commit"


Um branch no Git é simplesmente um ponteiro móvel leve para um commit. O nome da branch padrão no Git é a master . Conforme você começa a fazer commits, você recebe um branch master que aponta para o último commit que você fez. Toda vez que você confirma, o ponteiro do branch master avança automaticamente.

git checkout -b vava
#3 Utilização do Git
Branch

#3 Utilização do Git
Branch
Deletar uma branch


Listando Branchs
#3 Utilização do Git
Branch
Experimentem:
- Crie uma branch chamada "funcionalidade1"
- Faça 2 commits na branch "funcionalidade1" com novos arquivos
- Retorne a branch master
- Liste os arquivos contidos no repositório
- O que ocorreu?
#3 Utilização do Git
Merge
Juntar dois ou mais históricos de desenvolvimento



#3 Utilização do Git
Rebase
Reaplicar commits em cima de outra ramificação (base)



Vamos verificar como ficou nossa árvore de commits

#3 Utilização do Git
Stash
O Stash é útil quando queremos tirar temporariamente arquivos do stage para utilizar posteriormente.



Remove do stage e inclui no stash
Aplica o stage na branch atual
#3 Utilização do Git
Stash
Criando um nome para o Stash
Aplicando um stash específico



Limpando os stash's salvos
#3 Utilização do Git
Resumindo

#3 Utilização do Git
Remoto
$ git remote -v
$ git remote --verbose

#3 Utilização do Git
Gitlab
O GitLab é um gerenciador de repositório de software baseado em git, com suporte a Wiki, gerenciamento de tarefas e CI/CD.
- Software Livre
- Permite que os desenvolvedores armazenem o código em seus próprios servidores
#3 Utilização do Git
Gitlab
Quem usa?
-
É usado por mais de 100 000 organizações, entre elas:
-
IPqM (Marinha do Brasil)
-
Serpro (Serviço Federal de Processamento de Dados)
-
NASA, Alibaba, Invincea, O’Reilly Media, CERN, Projeto GNOME, SpaceX
-
FPF Tech
-
#3 Utilização do Git
Gitlab - História
2013
Produtos
Em Julho ouve a separação em dois produtos:
- Gitlab (CE) Comunity Edition
- Gitlab (EE) Enterprise Edition
2014
Open Core
Adoção do modelo 'Open Core'. Assim mudando a licença MIT do produto Gitlab EE para licença proprietária contendo alguns aspectos a mais que o produto Gitlab CE.
Início
O software foi escrito originalmente por Dmitriy Zaporozhets (atual CTO), da Ucrânia em 2011, era chamado GitLab sendo totalmente de graça e open source, distribuído sob a Licença MIT.
1970
#3 Utilização do Git
Gitlab - Criando um repositório
- Criar uma conta no https://gitlab.com
- Criar um novo projeto https://gitlab.com/projects/new

#3 Utilização do Git
Gitlab - Criando um repositório remoto
Vamos as opções..
- Podemos clonar o repositório utilizando SSH ou HTTPS
-
Existem possibilidades caso:
- Seja um novo repositório
- Já exista o repositório localmente
- Já exista o repositório localmente com um remoto diferente

Text
#3 Utilização do Git
Gitlab - Incluir repositório remoto ao nosso local
Agora vai..
- Vamos utilizar o protocolo TCP/IP HTTPS dado que pra SSH devemos configurar chaves (veremos depois como configura)
- Como ja possuímos um repositório local vamos incluir apenas o remoto.

Nome convenção
Pode haver mais de um
Enviar
Baixar
#3 Utilização do Git
Gitlab - Enviar nossos commits para o remoto
- Para enviar o conteúdo de nosso repositório local devemos utilizar o git push




#3 Utilização do Git
Gitlab - Verificar a atualização no repositório remoto


#3 Utilização do Git
Gitlab - Clonando repositório

git clone https://repositorio.git nome_da_pasta
#3 Utilização do Git
Gitlab - Verificando branch
- git branch
- git branch -a
#3 Utilização do Git
Gitlab - Checkout de branch
- git checkout -b nome_branch_local origin/nome_branch_no_remoto
#3 Utilização do Git
Gitlab - Atualizar branch local a partir do remoto
$ git fetch origin # Busca de todas as branches
$ git pull # Puxa de acordo com HEAD
$ git pull origin master # Puxa de acordo com a origem (remoto) - O professor irá alterar o arquivo README.md
- Comitar a modificação
- Puxar a partir do repositório local


#3 Utilização do Git
Gitlab - Simulando um conflito
- Alunos criem um novo commit alterando o README.md
- O Professor alterará o arquivo só que diretamente no remoto
- Agora vamos fazer um "git fetch origin" para atualizar nossas branchs e um "git status"


Cadê a origem que estava aqui!
#3 Utilização do Git
Gitlab - Simulando um conflito
- Vamos fazer o pull (baixar) do remoto
- O que vai acontecer?
- Resolver o conflito




#3 Utilização do Git
Gitlab - Resolvendo o conflito
- Comitar as modificações
- Fazer o push
- Verificar nossa árvore


#3 Utilização do Git
Gitlab - Criando chave SSH
Com poucos passos conseguimos configurar nossa chave pública e privada (local) associando ao remoto
- Gerar as chaves
- id_rsa.pub (pública)
- id_rsa (privada)
- Você pode criá-los executando um programa chamado ssh-keygen, que é fornecido com o pacote SSH em sistemas Linux/Mac e vem com o Git para Windows:


chave pública
#3 Utilização do Git
Gitlab - Associando chave SSH
- Acessar Preferencias do seu usuário no gitlab


2. Agora basta adicionar sua chave pública gerada. Prontinho pode usar o repositório remoto com SSH.
$ git remote set-url origin git@gitlab.com:Vanilton18/git-whatever.git#3 Utilização do Git
Git - O que vimos até aqui
- push
- pull
- clone
- fetch
- remote
- merge
- rebase
- branch
- stash
- ignore
- status
- log
- log com gráfico
- add
- rm
- reset
- checkout
- switch
- commit (amend e com add)
#3 Utilização do Git
Clientes Git





Por meio dos clientes git podemos realizar todas as ações realizadas no terminal com ganhos de produtividade.
#3 Utilização do Git
Utilizando cliente Git - PyCharm

- Instale o PyCharm CE (Community)

2. Importar o projeto que já criamos no git
#3 Utilização do Git
Utilizando cliente Git - PyCharm
- Para ver nosso repositório agora, podemos usar o terminal do próprio PyCharm

.idea/ gerada pela IDE
2. Como é uma pasta gerada para cada usuário, vamos incluí-la no .gitignore.
#3 Utilização do Git
Utilizando cliente Git - PyCharm
- Já sabemos visualizar os status pelo terminal agora vamos checar isso na IDE
- Agora temos a lista de arquivos alterados pendentes de commit, abra o arquivo e vamos poder visualizar a diferença do arquivo comitado para o alterado.


#3 Utilização do Git
Utilizando cliente Git - PyCharm
- Agora vamos comitar nossa alteração pela interface gráfica

Comitar local
Comitar e enviar para o remoto


#3 Utilização do Git
Utilizando cliente Git - PyCharm
- Para exibir o log podemos acessar o Show Git Log

#3 Utilização do Git
Utilizando cliente Git - PyCharm
- Façam alterações no repositório e enviem o commit (push) para o remoto.
- Alguém irá realizar o envio primeiro para o remoto e fatalmente alguém terá que realizar o Merge após tentar um Push :)


#3 Utilização do Git
Utilizando cliente Git - PyCharm
- Agora vamos resolver..

Merge = Novo Commit
#3 Utilização do Git
Atualizando

- Atualizar a branch atual com o remoto
- Busca as alterações de todas as raízes e branches do projeto e mescla as branches remotas rastreadas em sua cópia de trabalho local (equivalente a pull)
#3 Utilização do Git
Criando branch e enviando ao remoto

- Crie uma branch com seu nome
- Faça o Push para o remoto
- Agora realize uma alteração na sua branch e faça o push
- Vamos verificar as alterações trocando de branch
#3 Utilização do Git
Criando branch e enviando ao remoto
- Altere um arquivo e clique com o direito sobre ele na lista de alterações
- Salve o Shelve


Nota: Shelves são salvar em .idea/shelf
#3 Utilização do Git
Shelve
- Altere um arquivo e clique com o direito sobre ele na lista de alterações
- Salve o Shelve


Nota: Shelves são salvar em .idea/shelf
#3 Utilização do Git
Filtro de Branchs

#3 Utilização do Git
Merge entre Branchs
- Vamos ver onde está nosso HEAD
- Faça checkout de sua Branch
- Clique com o direito na branch que deseja puxar para a sua
- Faça o merge

#3 Utilização do Git
Reset
- git reset --soft
- git reset --mixed (default)
- git reset --hard
Reinicia a árvore sem perder o conteúdo dos commits, e incluindo os arquivos em stage
Reinicia a árvore sem perder o conteúdo dos commits, porém não incluindo os arquivos em stage
Reinicia a árvore e perde o conteúdo dos commits anteriores, mantendo apenas os arquivos do commit selecionado
#3 Utilização do Git
Reset


#3 Utilização do Git
Gitlab - Configurações
- Gerais
- Integrações
- Webhooks
- Repositório
- CI/CD
- Runners
- Repositório
- Commits
- Branchs
- Tags
- Issues
- Board
- Wiki
#3 Utilização do Git
Gitlab - Merge Request
- Vamos desenvolver um script python para realizar as operações matemáticas de adição, subtração, divisão, multiplicação.
- Para cada operação desenvolvida vamos abrir um Merge Request ou Pull Request
- Vamos verificar como resolver conflitos em MR
- Code Review
- Correção de review
#3 Utilização do Git
Gitlab - Merge Request



#3 Utilização do Git
Gitlab - Merge Request

#3 Utilização do Git
Gitlab - Pipeline
- Possuir um runner compartilhado ou dedicado https://docs.gitlab.com/runner/register/
-
Configurar os estágios do pipeline no .gitlab-ci.yml
-
Configurar as regras de execução
#3 Utilização do Git
Gitlab - Trabalho Pipeline
- Configure uma pipeline com duas etapas, sendo elas:
- Executar testes estáticos para o projeto de calculadora em python. Utilize flake8.
- Execute testes unitários utilizando o framework unittest
- Esta execução deve ser realizada em um Runner na nuvem.
Referências
-
CAMERON, E. Gerenciamento de mudanças. São Paulo: Clio Editora, 2009.
-
CHACON, S. Pro Git. Dialetica. 2009. 14-302-1833-9.
-
MOLINARI, L. Gerência de configuração - técnicas e práticas no
desenvolvimento do software. Florianópolis: Visual Books, 2007.
-
BROWN, W. J. et al. Antipatterns and patterns in software configuration
management. New York: Wiley computer publishing, 1999.
-
MIKKELSEN, T.; PHERIGO, S. Practical software configuration management:
the Latenight Developer's Handbook. Bergen County: Prentice Hall PTR, 1997.
-
PRESSMAN, R. S. Engenharia de Software. São Paulo: Pearson Makron Books,
1995.
Referências
-
https://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers%C3%B5es
eTech - Ferramentas para Versionamento de Código e Integração Contínua
By Vanilton Pinheiro
eTech - Ferramentas para Versionamento de Código e Integração Contínua
Compreender e desenvolver a capacidade de aplicar os conceitos, técnicas, métodos e ferramentas para a manutenção dos artefatos relacionados ao desenvolvimento de software.
- 646