Programação para Web II

Aula 11 : Gestão de Repositório

Aula 11 - Gestão de Repositório

Apresenta a ferramenta de gestão de repositórios Gitlab

Gestão de Repositórios

Gitlab

O GitLab é uma plataforma baseada em Git que integra um grande número de ferramentas essenciais para desenvolvimento e implantação de software e gerenciamento de projetos:

  • Hospedagem de código em repositórios com controle de versão;
  • Acompanhamento de propostas para novas implementações, relatórios de bugs e feedback;
  • Rastreador completo de problemas;
  • Organização e priorização com os painéis de questões;
  • Revisão o código em Merge Requests
  • Construção, teste e implantantação com integração contínua integrada (CI/CD).
  • Implantação de sites estáticos pessoais e profissionais com as páginas do GitLab.
  • Integração com o Docker usando o GitLab Container Registry.
  • Rastreio do ciclo de vida do desenvolvimento usando o GitLab Cycle Analytics.

Fluxo de Projeto

Gitflow

gitflow

GitHubflow

githubflow

GitLabflow

gitlabflow

Mais informações em Gitlab Flow

Serviços de Repositório
Diferenças do gitlab para outros serviços

Gitlab

Repositório Gitlab

Um repositório é o que você usa para armazenar sua base de código no GitLab e alterá-lo com o controle de versão. Um repositório é parte de um projeto.

A interface web do GitLab permite:

  • Criação, upload e edição de arquivos
  • Criação de diretórios
  • Iniciar merge requests
  • Renderização do README ou index
  • Commits (por consequência de alterações, merges e reverts)
  • Analisar contribuidores [+]
  • Visualização gráfica dos branchs [+]
  • Download direto do código-fonte (zip/tar)
Branches no Gitlab

Uma ramificação é uma versão da árvore de trabalho de um projeto. Você cria uma ramificação para cada conjunto de alterações relacionadas feitas. Isso mantém cada conjunto de mudanças separadas umas das outras, permitindo que alterações sejam feitas em paralelo.

Depois de enviar suas alterações para um novo branch, é possível:

  • Comparar branches
  • Criar uma solicitação de mesclagem
  • Realize a revisão de código em linha
  • Discuta sua implementação
  • Visualizar alterações enviadas para um novo branch

O branch padrão é chamado de master. Você pode selecionar o branch padrão nas configurações do projeto, que é automaticamente protegido contra deleção acidental.

Issues no Gitlab

As issues são o meio fundamental para colaborar com idéias e planejar o trabalho no GitLab.

Casos de uso comuns incluem:

  • Discussão da implementação de uma nova ideia;
  • Tarefas de acompanhamento e status de trabalho;
  • Aceitar propostas de recursos, perguntas, solicitações de suporte ou relatórios de bugs;
  • Elaboração novas implementações de código;
Merges no Gitlab

As Merge Requests permitem visualizar e colaborar nas alterações propostas ao código-fonte que existem conforme confirmadas em uma determinada ramificação Git.

Com as Merge Requests do GitLab, você pode:

  • Comparar as mudanças entre dois ramos;
  • Rever e discutir as modificações propostas linha a linha;
  • Testar e implantar seu código por branch;
  • Impedir merges antes de estar pronta com os WIP (Work In Progress);
  • Visualizar o processo de implantação por meio de gráficos de pipeline;
  • Fechar automaticamente problemas que originaram a implementação proposta no merge;
  • Atribuir o merge a um usuário;
  • Atribuir um milestone e acompanhar o desenvolvimento de uma implementação mais ampla;
  • Identificar com labels;
  • Adicionar uma estimativa de tempo e o tempo gasto;
  • Resolver conflitos de mesclagem;
  • Ativar fast-forward merges;
  • Criar novas merge requests por email;
  • Integrar merge requests em um único commit;
Milestones no Gitlab

As Milestones no GitLab são uma maneira de rastrear issues e merges criadas para atingir uma meta mais ampla em um determinado período de tempo.

Uma Milestone pode ser utilizada, por exemplo, em forma de Agile Sprints ou Releases.

Forks no Gitlab

Um Fork é uma cópia de um repositório original que você coloca em outro `namespace`, onde você pode experimentar e aplicar alterações que você pode decidir posteriormente compartilhar ou não (através de `Merge Requests`), sem afetar o projeto original.

CI/CD no Gitlab

Continuous Integration (CI) funciona enviando pequenos pedaços de código para a base de código do seu aplicativo hospedada em um repositório Git e, a cada envio, execute um pipeline de scripts para criar, testar e validar as alterações de código antes de mesclá-las na ramificação principal.

Continuous Delivery (CD) consiste em um passo adicional da CI, implantando seu aplicativo na produção a cada push na ramificação padrão do repositório.

O CI/CD do GitLab é configurado por um arquivo chamado .gitlab-ci.yml, colocado na raiz do repositório. Os scripts definidos neste arquivo são executados pelo GitLab Runner.

yaml gitlab-ci.yaml
image: node:8.10.0
cache:
    paths:
    - node_modules/
stages:
    - deploy_production
Production:
    image: ruby:latest
    only:
    - master
    stage: deploy_production
    script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl --provider=heroku --app=$HEROKU_APP_NAME --api-key=$HEROKU_API_KEY
Outros recursos do Gitlab

Grupos

Um grupo é um conjunto de projetos, juntamente com dados sobre como os usuários podem acessar esses projetos. Cada grupo tem um namespace de projeto (da mesma forma que os usuários). Dessa forma é possível utilizar a integração de grupos para alocar times para projetos ou estabelecer projetos inteiros dentro de um grupo.

Snippets

Snippets são blocos de código que você deseja armazenar no GitLab, dos quais você tem acesso rápido.

Webhooks

Os webhooks do projeto permitem acionar um URL se, por exemplo, um novo código for enviado ou um novo problema for criado. Você pode configurar webhooks para ouvir eventos específicos. O GitLab enviará uma solicitação POST com dados para o URL do webhook.

API

A API REST do GitLab permite que os desenvolvedores acessem e integrem a funcionalidade do GitLab com outros aplicativos e criem novos aplicativos. Alguns exemplos de métodos de API incluem recuperação e gerenciamento de usuários, publicação e recuperação de problemas e gerenciamento de informações do projeto.

Bônus: Implantação

Heroku
Logo do heroku

Heroku é uma Plataforma como Serviço (PaaS - Plataform as a Service) que suporta a implantação de aplicações nas mais variadas plataformas e linguagens de programação. Através do Heroku é possível hospedar um container de aplicação com a possibilidade de escalar em diversos servidores.

O Heroku usa um servidor git para gerenciar as requisições do usuário. Todos os serviços hospedados são feitos sobre a Amazon EC2.

Implantando Projeto no Heroku

Para implantar um projeto de maneira simples no heroku é necessário os seguintes requisitos:

A aplicação precisará também, de um arquivo de configuração que é específico para cada linguagem, como o pipfile para Python e project.json para pacotes Node. Nele deve estar especificado como a aplicação deve ser aberta e quais suas dependências.

Outro requisito é que a aplicação deve usar uma variável de ambiente para especificar a porta que será utilizada pela aplicação. Com node/dyno poderiamos utilizar a seguinte função:

js server.js
process.env.PORT

Essa mesma variável pode ser configurada pela interface web do Heroku

Para realizar o deploy é preciso logar no Heroku através da aplicação CLI e criar uma nova aplicação:

sh bash
heroku login
heroku apps:create meuApp

Por fim, vamos adicionar o repositório criado no heroku e enviar a aplicação:

sh bash
heroku git:remote -a meuApp
git push heroku master

Lembre-se de executar todos os comandos dentro da pasta raiz do projeto

Mão na Massa

Exercício: Merge Pokémon

Crie um fork do repositório deste endereço https://gitlab.com/ppw-unesc/pokemon-api e implemente uma das alterações nas funções da pasta API.

Você deve comentar uma das issues presentes no repositório, confirmando que fará o desenvolvimento da respectiva função

No final, deverá inserir criar um novo Merge Request a partir de seu repositório no repositório original do exercício

Não é necessario realizar nenhuma postagem no AVA. Este exercício será avaliado de acordo com a função implementada e seu devido Merge Request

Exercícios Complementares

Exercício: Fork da Lista de Exercícios

Crie um fork do repositório. Adicione um link remoto para o seu novo repositório (fork) utilizando o comando git remote e envie as alterações para o seu repositório utilizando o comando git push.