Git
Chapters ▾ 2nd Edition

4.8 Git on the Server - GitLab

GitLab

Embora o GitWeb seja bastante simplista, se você estiver procurando por um servidor Git mais moderno e completo, existem algumas soluções de código aberto lá fora que você pode instalar em vez deste. Como o GitLab é um dos mais populares, vamos cobrir a instalação e usá-lo como um exemplo. Este é um pouco mais complexo do que a opção GitWeb e provavelmente requer mais manutenção, mas é uma opção muito mais completa.

Instalação

O GitLab é um aplicativo da Web baseado em banco de dados, por isso sua instalação é um pouco mais trabalhosa do que alguns outros servidores Git. Felizmente, este processo é muito bem documentado e apoiado.

Existem alguns métodos que você pode seguir para instalar o GitLab. Para obter algo em execução rapidamente, você pode baixar uma imagem de máquina virtual ou um instalador de um clique em https://bitnami.com/stack/gitlab e ajustar a configuração para que corresponda ao seu ambiente particular.. Um toque agradável que Bitnami incluiu é a tela de login (acessada digitando alt-→); Ele informa o endereço IP e o nome de usuário e senha padrão para o GitLab instalado.

A tela de login da máquina virtual Bitnami GitLab.
Figure 50. A tela de login da máquina virtual Bitnami GitLab.

Para qualquer outra coisa, siga as orientações no readme do GitLab Community Edition, que pode ser encontrado em https://gitlab.com/gitlab-org/gitlab-ce/tree/master. Lá você encontrará assistência na instalação do GitLab usando receitas do Chef, a máquina virtual no Digital Ocean, e os pacotes RPM e DEB (que, no momento em que este texto foi escrito, estava na versão estável Omnibus, para os sistemas operacionais Ubuntu 14.04, Ubuntu 16.04, Debian 7, Debian 8, CentOS 6, CentOS 7, OpenSUSE 42.1 e Raspberry PI 2 em Raspbian). Há também guias com orientações “não oficiais” para que o GitLab funcione em sistemas operacionais e bancos de dados diferentes dos citados acima, um script para instalação completamente manual e muitos outros tópicos.

Administração

A interface de administração do GitLab é acessada através da web. Basta apontar o seu navegador para o nome do host ou endereço IP onde o GitLab está instalado e efetuar login como um usuário admin. O nome de usuário padrão é admin@local.host e a senha padrão é 5iveL!fe (que você será solicitado a alterar assim que você entrar nele). Depois de efetuar login, clique no ícone “Área de administração” no menu no canto superior direito.

O item Área de administração no menu GitLab.
Figure 51. O item “Área de administração” no menu GitLab.

Usuários

Usuários no GitLab são contas que correspondem a pessoas. As contas de usuário não têm muita complexidade; A conta de usuário é uma coleção de informações pessoais anexadas aos dados de login. Cada conta de usuário vem com um namespace, que é um agrupamento lógico de projetos que pertencem a esse usuário. Se o usuário jane tivesse um projeto chamado project, o URL do projeto seria http://servidor/jane/project.

Tela de administração de usuários do GitLab.
Figure 52. Tela de administração de usuários do GitLab.

Remoção de um usuário pode ser feito de duas formas. “Bloquear” um usuário os impede de logar na instância do Gitlab, mas todos os dados sob o namespace do usuário serão preservados, e os commits assinados com o e-mail do usuário ainda irão direcionar para o perfil do mesmo.

“Destruir” um usuário, por outro lado, remove o remove completamente do banco de dados e do sistema de arquivos. Todos os projetos e dados no namespace são removidos, e qualquer outro grupo que ele possua também será removido. Isso é obviamente uma ação muito mais permanete e destrutiva, e o uso disso é raro.

Grupos

Um grupo GitLab é um conjunto de projetos, juntamente com dados sobre como os usuários podem acessar esses projetos. Cada grupo tem um espaço para nome de projeto (da mesma forma que os usuários), então se o grupo training tiver um projeto materials, sua url seria http://servidor/training/materials.

Tela de administração de grupos do GitLab.
Figure 53. Tela de administração de grupos do GitLab.

Cada grupo está associado a um número de usuários, cada um com um nível de permissões para os projetos do grupo e para o próprio grupo. Estes variam de “Convidado” (problemas e bate-papo somente) a “Proprietário” (controle total do grupo, seus membros e seus projetos). Os tipos de permissões são muito numerosos para listar aqui, mas o GitLab tem um link útil na tela de administração.

Projetos

Um projeto GitLab corresponde grosso modo a um único repositório Git. Cada projeto pertence a um único namespace, a um usuário ou a um grupo. Se o projeto pertence a um usuário, o proprietário do projeto tem controle direto sobre quem tem acesso ao projeto; Se o projeto pertence a um grupo, as permissões de nível de usuário do grupo também terão efeito.

Cada projeto também tem um nível de visibilidade, que controla quem tem acesso de leitura às páginas desse projeto e ao repositório. Se um projeto for Privado, o proprietário do projeto deve conceder explicitamente acesso 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 à interface web do usuário a esse projeto.

Ganchos (hooks)

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

Uso Básico

A primeira coisa que você vai querer fazer com o GitLab é criar um novo projeto. Isso é feito clicando no ícone “+” na barra de ferramentas. Ser-lhe-á pedido o nome do projecto, a qual namespace ele deverá pertencer e que nível de visibilidade deverá ter. A maior parte do que você especifica aqui não é permanente e pode ser reajustada posteriormente através da interface de configurações. Clique em “Criar projeto” e pronto.

Uma vez que o projeto exista, você provavelmente vai querer conectá-lo com um repositório Git local. Cada projeto é acessível através de HTTPS ou SSH, sendo que ambos podem ser usados para configurar um Git remoto. As URLs estão visíveis na parte superior 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://servidor/namespace/project.git

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

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

A interface do usuário da Web fornece acesso a várias visualizações úteis do próprio repositório. A página inicial de cada projeto mostra as atividades recentes e os links ao longo do topo levam você a exibições dos arquivos do projeto e do log de commits.

Trabalhando juntos

A maneira mais simples de trabalhar juntos em um projeto GitLab é dar a outro usuário acesso direto de push (envio de commits) ao repositório Git. Você pode adicionar um usuário a um projeto indo para a seção “Membros” das configurações desse projeto e associando o novo usuário com um nível de acesso (os diferentes níveis de acesso estão um pouco descritos em Grupos). Ao fornecer a um usuário um nível de acesso de “Desenvolvedor” ou superior, esse usuário pode empurrar branches e ramificações diretamente para o repositório.

Outra maneira mais dissociada de colaboração é usar solicitações de mesclagem. Esse recurso permite que qualquer usuário que possa ver um projeto contribua para ele de forma controlada. Os usuários com acesso direto podem simplesmente criar uma ramificação, empurrá-la para ele e abrir uma solicitação de mesclagem de seu ramo de volta para master ou qualquer outra ramificação. Os usuários que não têm permissões push para um repositório podem "fork" (criar sua própria cópia), push commit para aquela cópia e abrir uma solicitação de mesclagem de sua bifurcação de volta para o projeto principal. Este modelo permite que o proprietário esteja no controle total do que entra no repositório e quando, embora permita contribuições de usuários não confiáveis.

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

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