Chapters ▾ 2nd Edition

4.8 Git no Servidor - GitLab

GitLab

O GitWeb é bem simplista, no entanto. Se você está procurando um servidor Git moderno e completo, há várias soluções de código aberto que você pode instalar. Como o GitLab é um dos mais populares, vamos abordar a sua instalação e uso como exemplo. Isso é mais difícil que a opção GitWeb e exigirá mais manutenção, mas é uma opção completa.

Instalação

O GitLab é uma aplicação web com suporte a banco de dados (database-backed), então a sua instalação é mais complexa do que a de alguns outros servidores Git. Felizmente, esse processo é bem documentado e suportado. O GitLab recomenda fortemente a instalação do GitLab no seu servidor através do pacote oficial Omnibus GitLab.

As outras opções de instalação são:

  • Gráfico (chart) GitLab Helm, para uso com o Kubernetes.

  • Pacotes GitLab em Docker para uso com o Docker.

  • A partir dos arquivos fonte (source files).

  • Provedores de nuvem como AWS, Google Cloud Platform, Azure, OpenShift e Digital Ocean.

Para mais informações, leia o leia-me (readme) do GitLab Community Edition (CE).

Administração

A interface de administração do GitLab é acessada pela web. Basta apontar o seu navegador para o hostname ou endereço IP onde o GitLab está instalado e fazer o login como o usuário root. A senha dependerá do seu tipo de instalação, mas por padrão, o Omnibus GitLab gera automaticamente uma senha e a armazena em /etc/gitlab/initial_root_password por pelo menos 24 horas. Siga a documentação para mais detalhes. Depois de logar, clique no ícone “Admin area” (área de Administração) no menu superior direito.

O item "Admin area" no menu do GitLab
Figure 50. O item “Admin area” no menu do GitLab

Usuários

Todo mundo que usa o seu servidor GitLab deve ter uma conta de usuário. As contas de usuário são bem simples, elas contêm principalmente informações pessoais anexadas aos dados de login. Cada conta de usuário tem um namespace, que é um agrupamento lógico de projetos que pertencem a esse usuário. Se a usuária jane tivesse um projeto chamado project, a URL desse projeto seria http://server/jane/project.

A tela de administração de usuários do GitLab
Figure 51. A tela de administração de usuários do GitLab

Você pode remover uma conta de usuário de duas maneiras: “Bloquear” (Blocking) um usuário o impede de fazer login na instância do GitLab, mas todos os dados sob o namespace daquele usuário serão preservados, e os commits assinados com o endereço de e-mail daquele usuário ainda estarão vinculados ao seu perfil.

“Destruir” (Destroying) um usuário, por outro lado, o remove completamente do banco de dados e do sistema de arquivos. Todos os projetos e dados no namespace dele são removidos, e quaisquer grupos que ele possua também serão removidos. Esta é obviamente uma ação muito mais permanente e destrutiva, e você raramente precisará dela.

Grupos

Um grupo do GitLab é uma coleção 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), então se o grupo training tem um projeto materials, a sua URL seria http://server/training/materials.

A tela de administração de grupos do GitLab
Figure 52. A tela de administração de grupos do GitLab

Cada grupo está associado a um número de usuários, cada um dos quais tem um nível de permissões para os projetos do grupo e para o próprio grupo. Estes variam de “Convidado” (Guest - apenas issues e chat) a “Proprietário” (Owner - controle total do grupo, seus membros e seus projetos). Os tipos de permissões são numerosos demais para serem listados aqui, mas o GitLab tem um link útil na tela de administração.

Projetos

Um projeto do GitLab corresponde aproximadamente a um único repositório Git. Cada projeto pertence a um único namespace, seja de um usuário ou de um grupo. Se o projeto pertencer a um usuário, o proprietário do projeto tem controle direto sobre quem tem acesso ao projeto; se o projeto pertencer a um grupo, as permissões de nível de usuário do grupo entrarão em vigor.

Cada projeto tem um nível de visibilidade, que controla quem tem acesso de leitura às páginas e ao repositório desse projeto. Se um projeto for Privado, o proprietário do projeto deve conceder acesso explicitamente a usuários específicos. Um projeto Interno é visível para qualquer usuário logado, e um projeto Público é visível para qualquer pessoa. Observe que isso controla tanto o acesso git fetch quanto o acesso à UI web para esse projeto.

Ganchos (Hooks)

O GitLab inclui suporte para ganchos (hooks), tanto no nível de projeto quanto de sistema. Para qualquer um desses, o servidor GitLab executará um HTTP POST com algum JSON descritivo sempre que eventos relevantes ocorrerem. Essa é uma ótima maneira de conectar os seus repositórios Git e a instância do GitLab ao resto da sua automação de desenvolvimento, como servidores de CI, salas de bate-papo (chat rooms) ou ferramentas de implantação (deployment).

Uso Básico

A primeira coisa que você vai querer fazer com o GitLab é criar um novo projeto. Você pode fazer isso clicando no ícone “+” na barra de ferramentas. Você será solicitado a informar o nome do projeto, a qual namespace ele deve pertencer e qual deve ser o seu nível de visibilidade. A maior parte do que você especifica aqui não é permanente e pode ser alterada posteriormente através da interface de configurações. Clique em “Criar Projeto” (Create Project), e você está pronto.

Depois que o projeto existir, você provavelmente desejará conectá-lo a um repositório Git local. Cada projeto é acessível via HTTPS ou SSH, qualquer um dos quais pode ser usado para configurar um remoto Git. As URLs são visíveis no topo da página inicial do projeto. Para um repositório local existente, este comando criará um remoto chamado gitlab para o local hospedado:

$ git remote add gitlab https://server/namespace/project.git

Se você não tiver uma cópia local do repositório, pode simplesmente fazer isto:

$ git clone https://server/namespace/project.git

A interface web fornece acesso a várias visualizações úteis do próprio repositório. A página inicial de cada projeto mostra a atividade recente, e os links na parte superior o levarão a visualizações dos arquivos e do log de commits do projeto.

Trabalhando Juntos

A maneira mais simples de trabalhar junto em um projeto do GitLab é dando a cada usuário acesso direto de push ao repositório Git. Você pode adicionar um usuário a um projeto acessando a seção “Membros” (Members) das configurações desse projeto e associando o novo usuário a um nível de acesso (os diferentes níveis de acesso são discutidos um pouco em Grupos). Ao dar a um usuário um nível de acesso “Desenvolvedor” (Developer) ou superior, esse usuário pode fazer o push de commits e branches diretamente para o repositório.

Outra forma de colaboração, mais desacoplada, é usar merge requests (solicitações de mesclagem). Esse recurso permite que qualquer usuário que possa ver um projeto contribua com ele de forma controlada. Usuários com acesso direto podem simplesmente criar um branch, fazer o push de commits para ele e abrir um merge request de seu branch de volta para a master ou qualquer outro branch. Os usuários que não têm permissão de push para um repositório podem fazer o “fork” dele para criar sua própria cópia, fazer o push de commits para a cópia deles e abrir um merge request de seu fork de volta para o projeto principal. Esse modelo permite que o proprietário tenha controle total sobre o que entra no repositório e quando, ao mesmo tempo em que permite contribuições de usuários não confiáveis.

Os merge requests e os issues (problemas/tarefas) são as principais unidades de discussão de longa duração no GitLab. Cada merge request permite uma discussão linha por linha da alteração proposta (o que suporta um tipo leve de revisão de código), bem como um tópico de discussão geral (discussion thread). Ambos podem ser atribuídos a usuários ou organizados em marcos (milestones).

Esta seção é focada principalmente nos recursos do GitLab relacionados ao Git, mas como um projeto maduro, ele fornece muitos outros recursos para ajudar a sua equipe a trabalhar em conjunto, como wikis de projeto e ferramentas de manutenção do sistema. Um benefício do GitLab é que, uma vez que o servidor esteja configurado e funcionando, você raramente precisará ajustar um arquivo de configuração ou acessar o servidor via SSH; a maior parte da administração e do uso geral pode ser feita por meio da interface no navegador.