GitLab/Google Cloud

O GitLab é um sistema gerenciador de repositório de software, ou seja, um sistema onde podemos registrar as alterações em um arquivo ou conjunto de arquivos, é um sistema de controle de versão distribuído, CVS (na sigla em inglês para Concurrent Version System) e é bem similar ao GitHub, porém com algumas particulares, permitindo que os desenvolvedores armazenem o código em seus próprios servidores, ao invés de em servidores operados pelo GitHub. Outro ponto que também conta bastante a favor do GitLab é a sua interface, muito mais agradável do que a do GitHub, embora isso seja uma opinião particular e não implica em dizer que a interface do GitHub é ruim. Outros pontos que podem afetar a escolha são as integrações com outras ferramentas de terceiros além da de CI/CD. O GitHub funciona muito bem com as principais ferramentas no mercado, enquanto o suporte para o GitLab é bem mais limitado.

GitLab x GitHub
Data de lançamento:

GitLab: Setembro de 2011
GitHub: Abril de 2008
Ambos estão no mercado a um tempo bastante considerável e são confiáveis.

Preço

GitLab: permite a criação de inúmeros repositórios públicos e privados gratuitamente, assim como inúmeros colaboradores;
GitHub: permite a criação de inúmeros repositórios públicos gratuitamente e repositórios privados em planos pagos;
Se deseja utilizar o serviço sem expor o código fonte, utilize os repositórios privados do GitLab. Se deseja expor o código, pode ser tanto GitLab quanto GitHub.

Suporte a Wiki:

GitLab: possui;
GitHub: possui;
Em ambas as plataformas é possível criar Wikis para o repositório de forma gratuita.

Rastreamento de erros:

GitLab: possui;
GitHub: possui;
Ambas as plataformas possuem sistemas de controle de issues para gerenciamento de erros e bugs.

Branchs privadas:

GitLab: permite a criação de branchs privadas gratuitamente;
GitHub: permite a criação de branchs privadas apenas nos planos pagos;

Sistema de CI/CD:

GitLab: possui ferramenta gratuita nativa para CI/CD (Gitlab-CI-CD);
GitHub: depende de ferramentas de terceiros (costuma ser Travis-CI);
Embora o GitHub funcione muito bem com o Travis-CI, o Gitlab possui um sistema nativo, então não precisa depender de terceiros.

Popularidade:

GitLab: 100.000+ projetos;
GitHub: 35.000.000+ projetos;

Tais dados provavelmente estão bem desatualizados, mas com certeza o número de projetos no GitHub supera em muito do GitLab. Se o seu projeto for OpenSource e espera ter contribuição da comunidade, com certeza o GitHub é mais indicado. Se não espera que a comunidade naturalmente contribua, o GitLab serve.

Sem mais delongas, vamos por a mão na massa! 🙂

HAND’S ON

Para esse lab vamos configurar nosso servidor de repositório utilizando uma instância do Google Cloud no nosso velho Ubuntão de guerra (17.04, zesty). Como pré-requisito para este artigo precisaremos instalar o Cloud SDK, que é um conjunto de ferramentas para o Cloud Platform do Google.

Para seu S.O verifique a versão em: https://cloud.google.com/sdk/docs/

Let’s GO!

# export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

# echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list 

# curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   663  100   663    0     0   2351      0 --:--:-- --:--:-- --:--:--  4222
OK

# apt-get update -y && apt-get install google-cloud-sdk -y 

Terminada a instalação vamos configurá-lo:

# gcloud init 

Podemos verificar como a conta foi configurada com o comando:

# gcloud config list 
[compute]
region = southamerica-east1
zone = southamerica-east1-a
[core]
account = tbernacchi@gmail.com
disable_usage_reporting = True
project = eminent-cache-186621

Your active configuration is: [default]

Terminada a configuração vamos agora criar nossa “maquineta” que utilizaremos para o GitLab.

# gcloud compute instances create gitlab1 --machine-type=n1-standard-1 --zone=southamerica-east1-b --image-project=debian-9-stretch-v20171025
Created [https://www.googleapis.com/compute/v1/projects/eminent-cache-186621/zones/southamerica-east1-b/instances/gitlab1].
NAME   ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
gitlab1 southamerica-east1-b n1-standard-1 10.158.0.3 35.199.85.246 RUNNING

UP and RUNNING!!! Feito isso vamos fazer a troca de chaves SSH:

$ ssh-keygen -t rsa -f ~/.ssh/google_cloud -C tadeu 
$ cd ~root/.ssh/
$ chmod 400 google_cloud* 

Agora é só copiar a chave publica para a instância criada utilizando o console do Google Cloud. Para isso é só navegar até “Instâncias de VM”, clicar em Editar e procurar por SSH e colar a google_cloud.pub. Vamos pegar o IP da instância para o SSH.

# gcloud compute instances list 
NAME         ZONE                  MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
chef-server  southamerica-east1-a  n1-standard-1               10.158.0.2   35.199.120.73  RUNNING
gitlab1      southamerica-east1-b  n1-standard-1               10.158.0.3   35.199.85.246  RUNNING

Para efetuarmos o login na nossa instância sem precisamos efetuar a troca de chaves:

$ gcloud compute config-ssh 
WARNING: The public SSH key file for gcloud does not exist.
WARNING: The private SSH key file for gcloud does not exist.
WARNING: You do not have an SSH key for gcloud.
WARNING: SSH keygen will be executed to generate a key.
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/tadeu/.ssh/google_compute_engine.
Your public key has been saved in /home/tadeu/.ssh/google_compute_engine.pub.
The key fingerprint is:
SHA256:FQf8qaXdBKSlE1+CA03Oxod4NCMtiO1neC4Rz/NXuZU tadeu@lwayslearning
The key's randomart image is:
+---[RSA 2048]----+
|     o .o*O+= .  |
|    . + .B*%.o   |
|     . =..%ooo ..|
|      + B+ o+ +E.|
|       *So = + o |
|      . . + o o  |
|       .   .     |
|                 |
|                 |
+----[SHA256]-----+
Updating project ssh metadata...-Updated [https://www.googleapis.com/compute/v1/projects/kubernetes-198603].                                         
Updating project ssh metadata...done.                                                                                                                
You should now be able to use ssh/scp with your instances.
For example, try running:

  $ ssh chef-server.southamerica-east1-a.kubernetes-198603

Logamos com a chave:

# ssh -i google_cloud tadeu@35.199.85.246 
Linux gitlab1 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
-bash: warning: setlocale: LC_ALL: cannot change locale (pt_BR.UTF-8)
tadeu@gitlab1:~$ sudo su - 
root@gitlab1:~#

Lindo – Agora vamos preparar o sistema para a instalação e configuração do nosso GitLab.

root@gitlab1:~# apt-get update -y 
root@gitlab1:~# apt install curl \
openssh-server \ 
ca-certificates \ 
postfix \ 
apt-transport-https -y

Criamos um repositório com o seguinte conteúdo:

root@gitlab1:~# vim /etc/apt/sources.list.d/gitlab.list
deb https://packages.gitlab.com/gitlab/gitlab-ce/debian/ stretch main
deb-src https://packages.gitlab.com/gitlab/gitlab-ce/debian/ stretch main

Adicionamos a chave:

root@gitlab1:~# curl https://packages.gitlab.com/gpg.key | apt-key add - 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1703  100  1703    0     0   1846      0 --:--:-- --:--:-- --:--:--  1845
OK

Update and install:

root@gitlab1:~# apt-get update -y && apt-get install gitlab-ce -y 

Repare que no fim da instalação o próprio output do GitLab já diz exatamente o que precisa ser feito.


...
...
...
Setting up gitlab-ce (10.2.1-ce.0) ...
It looks like GitLab has not been configured yet; skipping the upgrade script.

       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.
  


     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ \`/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/
  

Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
  sudo gitlab-ctl reconfigure

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

root@gitlab1:~# 

root@gitlab1:~# vim /etc/gitlab/gitlab.rb
### Editar a linha: ###
- external_url 'http://gitlab1.tadeubernacchi.com.br';

Vamos adicionar também uma entrada no nosso /etc/hosts por enquanto:

35.199.85.246	gitlab1.tadeubernacchi.com.br	gitlab1

Feito isso:

root@gitlab1:~# gitlab-ctl reconfigure

Agora é só acessar no Browser http://gitlab1.tadeubernacchi.com.br/ – Não esqueça de habilitar o tráfego http/https na sua instância no gcloud.

No primeiro acesso ele irá pedir a criação de um usuário, esse usuário é o root. Após a criação desse usuário faça logout e restarte o GitLab:

root@gitlab1:~# gitlab-ctl restart

Sucesso, UP and RUNNING! Crie usuários, repositórios, brinque com a ferramenta.

CONCLUSÃO:
A motivação maior para escrever este artigo e fazer esse lab foi um vídeo do nosso amigo Anselmo DBA, onde ele mostra o passo-a-passo que ele fez para instalar e configurar o GitLab, achei tudo bem simples e de fácil configuração e de quebra aprendi um pouco sobre o Cloud do Google. Em relação ao GitLab acredito que atualmente é uma ferramenta indispensável hoje no mundo DevOps, tanto para desenvolvedores quanto para a operação. Para os próximos artigos irei configurar instâncias utilizando o “knife google” para automatizar todo esse processo de instalação e configuração utilizando o Chef. Até o próxima!!!

Referências:
https://cloud.google.com/docs/
https://cloud.google.com/sdk/gcloud/reference/compute/instances/create
https://www.youtube.com/watch?v=Vbtb4iMk-
https://usersnap.com/blog/gitlab-github/

GitLab/Google Cloud