|
|
|
Esta página descreve a ferramenta GitLab e faz parte do [Catálogo do LabES](../home).
|
|
|
|
|
|
|
|
|
|
|
|
## O que é?
|
|
|
|
|
|
|
|
O GitLab é uma plataforma para desenvolvimento e operação (_DevOps_) de software que reúne uma série de ferramentas úteis num projeto de desenvolvimento de software, como quadro de tarefas, repositório de código (Git), ferramentas de revisão de código, pipeline de construção e implantação de entregas (releases), ferramentas de monitoramento, etc.
|
|
|
|
|
|
|
|
O GitLab pode ser usado diretamente pelo site http://gitlab.com (na nuvem) ou pode ser obtido e instalado em seu próprio servidor (_self-managed_), como feito em https://gitlab.labes.inf.ufes.br/.
|
|
|
|
|
|
|
|
|
|
|
|
## Quando se aplica?
|
|
|
|
|
|
|
|
Quando se deseja desenvolver um projeto de software e utilizar uma ou mais ferramentas providas pela plataforma, como repositório de código-fonte, controle de tarefas, fluxo de gerência de configuração, revisão de código, etc.
|
|
|
|
|
|
|
|
|
|
|
|
## Como instalar?
|
|
|
|
|
|
|
|
Os procedimentos de instalação são detalhados na [documentação do GitLab](https://about.gitlab.com/install/) e a instalação numa máquina com um dos SOs compatíveis (ex.: Ubuntu Linux) e dedicada ao GitLab é bem simples e direta.
|
|
|
|
|
|
|
|
No LabES, o GitLab foi instalado no mesmo servidor que hospeda a [página do laboratório](http://labes.inf.ufes.br/). Neste caso, visto que o GitLab é baseado no servidor HTTP [nginx](https://nginx.org/) e o site do LabES estava sendo hospedado numa instância do servidor [Apache](https://httpd.apache.org/), ajustes tiveram que ser realizados no procedimento de instalação.
|
|
|
|
|
|
|
|
Dentre as opções: (a) adaptar o GitLab para rodar no Apache; (b) colocar o site do LabES para rodar no nginx; ou (c) manter os dois servidores HTTP, gerenciando portas de acesso, redirecionamentos, etc., optou-se pela alternativa (b) após algumas experimentações em que os resultados foram sendo avaliados. A alternativa (b) se mostrou a menos problemática.
|
|
|
|
|
|
|
|
Neste caso, o Apache HTTPD foi desinstalado do servidor e foi instalado o PHP FPM de modo que o nginx conseguisse hospedar o WordPress do site do LabES:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
$ apt install php php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath
|
|
|
|
```
|
|
|
|
|
|
|
|
Para que o site do LabES também funcionasse com HTTPS (SSL), foram seguidas as instruções [na página do certbot](https://certbot.eff.org/instructions?ws=other&os=ubuntufocal) para gerar um certificado gratuito [Let's Encrypt](https://letsencrypt.org/pt-br/) usando a opção que desliga o servidor Web temporariamente para gerar o certificado:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
$ sudo gitlab-ctl stop nginx
|
|
|
|
$ sudo certbot certonly --standalone
|
|
|
|
$ sudo gitlab-ctl start nginx
|
|
|
|
```
|
|
|
|
|
|
|
|
Em seguida, foi criado o arquivo `/etc/gitlab/nginx-wordpress.conf` para dizer ao nginx como servir o site do LabES (`labes.inf.ufes.br`) além do GitLab (`gitlab.labes.inf.ufes.br`), com o seguinte conteúdo:
|
|
|
|
|
|
|
|
```nginx
|
|
|
|
server{
|
|
|
|
listen 80;
|
|
|
|
server_name labes.inf.ufes.br;
|
|
|
|
root /var/www/html/labes.inf.ufes.br;
|
|
|
|
index index.php index.html index.htm;
|
|
|
|
|
|
|
|
# Configuration to use if you want to enable HTTP:
|
|
|
|
#location / {
|
|
|
|
# try_files $uri $uri/ /index.php?$args;
|
|
|
|
#}
|
|
|
|
|
|
|
|
# Configuration to use if you want to redirect to HTTPS instead:
|
|
|
|
location / {
|
|
|
|
return 301 https://labes.inf.ufes.br:443$request_uri;
|
|
|
|
}
|
|
|
|
|
|
|
|
# If you enable HTTP, also enable PHP on it:
|
|
|
|
#location ~ \.php$ {
|
|
|
|
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;
|
|
|
|
# fastcgi_index index.php;
|
|
|
|
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
|
|
# include /opt/gitlab/embedded/conf/fastcgi_params;
|
|
|
|
#}
|
|
|
|
}
|
|
|
|
|
|
|
|
server {
|
|
|
|
listen *:443 ssl http2;
|
|
|
|
|
|
|
|
server_name labes.inf.ufes.br;
|
|
|
|
server_tokens off; ## Don't show the nginx version number, a security best practice
|
|
|
|
|
|
|
|
root /var/www/html/labes.inf.ufes.br;
|
|
|
|
index index.php index.html index.htm;
|
|
|
|
|
|
|
|
## Strong SSL Security
|
|
|
|
## https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html & https://cipherli.st/
|
|
|
|
ssl_certificate /etc/letsencrypt/live/labes.inf.ufes.br/fullchain.pem;
|
|
|
|
ssl_certificate_key /etc/letsencrypt/live/labes.inf.ufes.br/privkey.pem;
|
|
|
|
|
|
|
|
if ($http_host = "") {
|
|
|
|
set $http_host_with_default "labes.inf.ufes.br";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($http_host != "") {
|
|
|
|
set $http_host_with_default $http_host;
|
|
|
|
}
|
|
|
|
|
|
|
|
gzip on;
|
|
|
|
gzip_static on;
|
|
|
|
gzip_comp_level 2;
|
|
|
|
gzip_http_version 1.1;
|
|
|
|
gzip_vary on;
|
|
|
|
gzip_disable "msie6";
|
|
|
|
gzip_min_length 250;
|
|
|
|
gzip_proxied no-cache no-store private expired auth;
|
|
|
|
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/json;
|
|
|
|
|
|
|
|
proxy_set_header Host $http_host_with_default;
|
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
|
|
proxy_set_header Connection $connection_upgrade;
|
|
|
|
proxy_set_header X-Forwarded-Proto https;
|
|
|
|
proxy_set_header X-Forwarded-Ssl on;
|
|
|
|
|
|
|
|
location / {
|
|
|
|
try_files $uri $uri/ /index.php?$args;
|
|
|
|
}
|
|
|
|
|
|
|
|
location ~ \.php$ {
|
|
|
|
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
|
|
|
|
fastcgi_index index.php;
|
|
|
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
|
|
include /opt/gitlab/embedded/conf/fastcgi_params;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
Para que o nginx e o PHP pudessem acessar o site do LabES no diretório `/var/www/html/labes.inf.ufes.br`, foram feitos os seguintes ajustes de permissão e usuários, além de reiniciar os serviços:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
$ adduser gitlab-www www-data
|
|
|
|
$ chown -R www-data:www-data /var/www/html
|
|
|
|
$ systemctl restart php7.4-fpm.service
|
|
|
|
$ gitlab-ctl restart nginx
|
|
|
|
```
|
|
|
|
|
|
|
|
Por fim, estas são as configurações adicionadas ao arquivo `/etc/gitlab/gitlab.rb` (buscar os termos de cada linha no arquivo, eles já existem e podem só estar comentados):
|
|
|
|
|
|
|
|
```conf
|
|
|
|
external_url 'https://gitlab.labes.inf.ufes.br'
|
|
|
|
web_server['external_users'] = ['www-data']
|
|
|
|
nginx['custom_nginx_config'] = "include /etc/gitlab/nginx-wordpress.conf;"
|
|
|
|
```
|
|
|
|
|
|
|
|
Para reiniciar o GitLab após mudar sua configuração:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
$ gitlab-ctl reconfigure
|
|
|
|
$ gitlab-ctl restart
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Como usar/aplicar?
|
|
|
|
|
|
|
|
Durante o procedimento de instalação é criado um usuário administrador (`root`). Entrando no sistema como _root_, outros usuários podem ser criados clicando-se em **Menu > Admin** e selecionando a opção **Overview > Users**. Ao indicar o e-mail do novo usuário, ele receberá uma notificação para entrar na plataforma e configurar sua senha.
|
|
|
|
|
|
|
|
Projetos podem ser criados por usuários que tenham permissão para tal em **Menu > Projects > Create new project**. Existem modelos (_templates_) de projetos, mas pode-se também importar projetos de outros repositórios (ex.: [GitHub](https://github.com/)) ou criar projetos em branco. Após criados os projetos, eles podem ser encontrados em **Menu > Projects > Your projects**.
|
|
|
|
|
|
|
|
Ao abrir um projeto, pode-se acessar as funcionalidades mais comuns a partir do menu à esquerda, por exemplo:
|
|
|
|
|
|
|
|
- **Project Information > Labels**: criação de rótulos para organização das tarefas do projeto em quadros (_boards_). Por exemplo, pode-se usar para montar quadros Kanban;
|
|
|
|
- **Project Information > Members**: adicionar usuários da plataforma ao projeto;
|
|
|
|
- **Repository > Files**: navegar pelos arquivos já produzidos no contexto do projeto, com destaque para o `README.md` que pode conter instruções gerais do projeto em formato [MarkDown](https://daringfireball.net/projects/markdown/);
|
|
|
|
- **Issues > Boards**: gerenciar as tarefas do projeto em quadros (_boards_), por exemplo quadros Kanban;
|
|
|
|
- **Merge Requests**: gerenciar as requisições de fusão e fazer revisões de código.
|
|
|
|
|
|
|
|
Em um contexto acadêmico, recomenda-se o professor administrador da plataforma [se cadastrar no programa GitLab for Education](https://about.gitlab.com/solutions/education/join/) de modo a conseguir gratuitamente uma licença GitLab Ultimate.
|
|
|
|
|
|
|
|
|
|
|
|
## Lições aprendidas a partir do uso no LabES
|
|
|
|
|
|
|
|
A partir do uso do GitLab no contexto do LabES, temos as seguintes dicas para compartilhar:
|
|
|
|
|
|
|
|
### Projetos Públicos:
|
|
|
|
|
|
|
|
Após a instalação do GitLab, grupos e projetos são criados como privativos por padrão, exigindo que a pessoa tenha uma conta no GitLab e seja membro do projeto para poder abrir e ver o mesmo. Alguns projetos (como, por exemplo, o próprio [Catálogo do LabES](https://gitlab.labes.inf.ufes.br/labes/catalogo/)) devem estar abertos ao público em geral e, portanto, devem ser configurados como públicos.
|
|
|
|
|
|
|
|
Ao criar um repositório, é possível definir sua visibilidade em **Visibility Level**. Para um repositório já criado, é possível modificar sua visibilidade em **Settings > General > Visibility, project features, permissions > Project visibility**. As opções são **Private** (apenas para membros do projeto), **Internal** (para qualquer pessoa com conta no GitLab) ou **Public** (qualquer pessoa pode ver).
|
|
|
|
|
|
|
|
No entanto, quando vinculados a um grupo, projetos só podem ter visibilidade igual ou mais restrita do que a visibilidade do seu grupo. Para modificar a visibilidade do grupo, é preciso ter conta de administrador, acessar a área de administração em **Menu > Admin**, abrir **Overview > Groups** e pedir para editar o grupo em questão, modificando o campo **Visibility level**.
|
|
|
|
|
|
|
|
É possível também modificar a visibilidade padrão para novos projetos, também na área de administração, em **Settings > General > Visibility and access controls > Default project visibility** e dos grupos em **Default group visibility**.
|
|
|
|
|
|
|
|
### Integração com Outras Ferramentas:
|
|
|
|
|
|
|
|
Projetos podem ser integrados com outras ferramentas. Por exemplo, é possível pedir ao GitLab que envie mensagens no [Slack](https://slack.com/intl/pt-br/) sobre certos eventos ocorridos no projeto (ex.: foi feito um _commit_ no ramo principal).
|
|
|
|
|
|
|
|
Para configurar uma integração, deve-se abrir o projeto e seguir para **Settings > Integrations**. Dicas para integração de algumas ferramentas que usamos no LabES com o GitLab podem ser encontradas nas páginas do catálogo que descrevem estas ferramentas.
|
|
|
|
|
|
|
|
|
|
|
|
## Perguntas frequentes
|
|
|
|
|
|
|
|
Ainda não há dúvidas frequentes registradas pelos(as) usuários(as) do GitLab no LabES.
|
|
|
|
|
|
|
|
|
|
|
|
## Referências
|
|
|
|
|
|
|
|
- [Site do GitLab](http://gitlab.com);
|
|
|
|
- [Instruções de instalação do GitLab](https://about.gitlab.com/install/);
|
|
|
|
- [Instruções para instalação de certificado via certbot](https://certbot.eff.org/instructions);
|
|
|
|
- [Documentação do GitLab](https://docs.gitlab.com/);
|
|
|
|
- [Recursos de ajuda do GitLab](https://about.gitlab.com/get-help/);
|
|
|
|
- [Instalação do GitLab no LabES](https://gitlab.labes.inf.ufes);
|
|
|
|
- [Site do servidor HTTP nginx](https://nginx.org/);
|
|
|
|
- [Site do servidor HTTP Apache](https://httpd.apache.org/);
|
|
|
|
- [Site da autoridade certificadora gratuita Let's Encrypt](https://letsencrypt.org/pt-br/);
|
|
|
|
- [Programa GitLab for Education](https://about.gitlab.com/solutions/education/).
|
|
|
|
|
|
|
|
## Autores(as)
|
|
|
|
|
|
|
|
- @vitorsouza. |
|
|
|
\ No newline at end of file |