# 5.5 Integrando GitLab e GitHub

Uma vez gerados os tokens de acesso de desenvolvedor, é possível agora da início à integração de ambas as plataformas. A intenção aqui é, importar o projeto exemplo da Loja Virtual atualmente hospedado no GitHub e configurar o GitLab de modo que os repositórios passem a ser espelhados.

Após isso, vamos ilustrar o pipeline de Integração Contínua que é executado a cada novo _commit_ da aplicação.

O primeiro passo a ser realizado é a importação do projeto do GitHub para o GitLab. Para isso, se ainda não foi feito, é necessário que você entre na plataforma do GitHub com sua conta, localize o projeto da loja virtual disponível no endereço [https://github.com/aurimrv/loja-virtual-devops](https://github.com/aurimrv/loja-virtual-devops) e faça um fork deste projeto, tornando-o disponível na sua conta do GitHub.

![Realizar um fork no projeto para que o mesmo fique disponível em sua conta do GitHub](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKUuKPklJv6Y932bNjE%2F-MKUugrGb9E6Tp05SHrq%2Fgithub-09.png?alt=media\&token=939f9b70-1b62-42ff-832e-3a244389e7f8)

### Importação do Projeto Exemplo

Em seguida, faça o login em sua conta da plataforma GitLab e siga os passos a seguir. Primeiramente, seleciona a opção de Projetos e, em seguida, selecione a opção para a criação de um novo projeto.

![Acesso aos projetos do GitLab](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKUvYEMxeu2CcFUBn7c%2F-MKUzdqutkpux6Pn5IT6%2Fgitlab-01.png?alt=media\&token=3962fc66-805b-4486-b18d-ae74662615ce)

No nosso caso, iremos importar um projeto do GitHub, conforme mostram as figuras a seguir.

![Importação de Projeto](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKUvYEMxeu2CcFUBn7c%2F-MKV-251OsIuyRK8HxFd%2Fgitlab-02.png?alt=media\&token=d2b24a67-88ef-4221-846c-a0170f3214ef)

![Importar projeto do GitHub](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKUvYEMxeu2CcFUBn7c%2F-MKV-8QFKflpH9MIva4m%2Fgitlab-03.png?alt=media\&token=c8eb0e35-70e2-42f4-ad4b-3da4213a9c73)

Feita essa seleção, ser exibida uma lista de projetos que podem ser importadas. Se você realizou o _fork_ do projeto original que está em minha conta do GitHub para a sua, nessa lista deve aparecer o projeto `loja-virtual-devops` precedido de seu nome de usuário e não de `aurimrv` como no exemplo. Localize esse projeto e escolha a opção de importar, seguindo os passos para finalizar essa operação.

![Importação do projeto exemplo](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKUvYEMxeu2CcFUBn7c%2F-MKV-ZYfUY4fXBgaejZc%2Fgitlab-04.png?alt=media\&token=33af0e37-e4f9-4554-a0c5-2902a1f017bf)

Se tudo correr bem, ao final, você deve ver o projeto em sua lista de projetos, conforme ilustrado a seguir.

![Projeto no GitLab importado do GitHub](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKV-xD9yUKNzNdTahtX%2F-MKV0DckHdMSWt9_LbQ9%2Fgitlab-05.png?alt=media\&token=93d25b00-6558-4197-bf07-7e60d095c315)

### Integração do GitLab com GitHub

Nos próximos passos iremos integrar o GitLab com o GitHub. Para isso, faremos uso do `GITHUB_TOKEN`, gerado anteriormente. A integração se dá conforme ilustrado a seguir.

Selecione o projeto que deseja realizar a integração e entre no menu lateral na opção Configurações->Integrações.&#x20;

![Opção de integração do GitLab](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKV-xD9yUKNzNdTahtX%2F-MKV0qHUs2kafiMfTNse%2Fgitlab-06.png?alt=media\&token=c3bce63e-1183-4859-a82e-3bb961d5a579)

Observa-se que o GitLab pode ser integrado a uma diversidade de ambientes. Navegue na lista até encontrar o GitHub e selecione essa opção.

![Integração com GitHub](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKV-xD9yUKNzNdTahtX%2F-MKV0kBo3EQ83Vs1odqd%2Fgitlab-07.png?alt=media\&token=32886f37-66f2-4275-8202-80192666271a)

Na janela que se abre  necessário fazer uso do token de acesso pessoal do GitHub que foi gerado anteriormente (`GITHUB_TOKEN`). Copie o valor do token e cole no campo indicado (1). Observa-se que você deve também alterar a URL para refletir a localização correta do projeto da `loja-virtual-devops` na sua área do GitHub (2).  Após colar o token é importante solicitar o teste da conexão (3). Se tudo correr bem, com o teste da conexão bem sucedido, basta salvar a configuração da integração realizada.

![Tela de integração e teste da conexão com GitHub](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKV-xD9yUKNzNdTahtX%2F-MKV2GCb-anE6eeODpDU%2Fgitlab-08.png?alt=media\&token=b35ce182-8a7a-4d72-b295-f8bed2e6454c)

![Configuração de integração bem sucedida](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKV-xD9yUKNzNdTahtX%2F-MKV2997FshvYU56t4xl%2Fgitlab-09.png?alt=media\&token=9b25c329-9563-4112-ae1c-eebd9f2d5523)

Observa-se que o próprio GitLab informa, na tela acima, que a integração com o GitHub exige que seja configurado o espelhamento do repositório no GitHub e isso é o que será feito em sequência.

### Espelhamento do Repositório do GitHub

O espelhamento permite que o repositório do GitLab e do GitHub permaneçam com as mesma informações em caso de mudança. É possível espelhar o repositório em uma direção ou em ambas, ou seja, qualquer alteração no repositório do projeto no GitHub é refletida dentro do repositório do projeto no GitLab e/ou vice-versa.

![Acesso a opção de espelhamento de repositório](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKV65mCYVv3CPGbbUNg%2F-MKV6OutvmLpGUwUeGYS%2Fgitlab-10.png?alt=media\&token=2e0a5e6e-c40c-4563-95c1-5d4a3e3b5dfc)

Considere a figura abaixo. Para configurar o espelhamento também será necessário fornecer o e a URL para acesso ao repositório (1). No meu caso, a URL foi ligeiramente diferente daquela mostrada na tela da integração acima. Ela tem o seguinte formato:&#x20;

`https://<seu_github_username>@github.com/<seu_github_group>/<seu_github_project>.git`

No meu caso, essa URL ficou assim:

`https://aurimrv@github.com/aurimrv/loja-virtual-devops.git`

Para mais informações sobre essa integração, é possível consultar a documentação oficial do GitLab, disponível nesse endereço: [https://docs.gitlab.com/ee/user/project/repository/repository\_mirroring.html](https://docs.gitlab.com/ee/user/project/repository/repository_mirroring.html).

![Dados para espelhamento em repositórios GitHub](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKV65mCYVv3CPGbbUNg%2F-MKV6cVXxKQN2RfBo5RE%2Fgitlab-11.png?alt=media\&token=6a2f12dc-197f-4045-b4b1-afcb8c343918)

No exemplo acima o espelhamento foi configurado apenas no sentido do GitLab para o GitHub, ou seja, na terminologia do Git, utilizando-se um `push` do repositório do GitLab para o repositório do GitHub (2). Desse modo, as alterações realizadas dentro do repositório do GitLab são copiadas para o repositório do GitHub após serem confirmadas por meio de um _commit_.

O campo senha (3) deve ser preenchido com o valor do `GITHUB_TOKEN`. Por fim, basta finalizar clicando em Espelhar Repositório (4).

Caso deseje forçar o espelhamento, basta clicar no ícone mostrado na tela abaixo. Do contrário, o espelhamento irá ocorrer periodicamente.

![](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKV7QtaTiruxBBmKgKL%2F-MKV7VgVFVF9WKU9vxRy%2Fgitlab-12.png?alt=media\&token=91ad4865-10fe-4e93-8411-4616fdbbd203)

### Criando Variáveis para Uso no Processo de CI/CD

A última etapa que devemos configurar para que possamos dar início à implementação do pipeline CI/CD é a definição de variáveis que serão utilizadas dentro do nosso fluxo. Para evitar a exposição de dados sigilosos dentro de nosso script de integração contínua ou de entrega contínua, o GitLab permite a definição de pares, (chave, valor) de modo que, dentro dos scripts, podemos simplesmente utilizar as chaves como uma variável e, durante a execução dos mesmos, essas chaves são substituídas pelos seus valores correspondentes.

Para o script que iremos desenvolver a seguir iremos precisar do nome do usuário e do token de acesso para a plataforma do Hub Docker. Optamos por colocar essas informações nessa seção de variáveis oferecida pelo GitLab. Toda vez que se desejar ocultar informações em nossos scripts, esse recurso pode ser utilizado.

Para isso, no menu de configuração do projeto, vamos selecionar a opção CI/CD.&#x20;

![Definições de variáveis no processo de CI/CD](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKV9K0Ox5o2NlBYoJjC%2F-MKV9drPQZkDNEsVCOfL%2Fgitlab-13.png?alt=media\&token=cd277484-c226-4f2a-b1ab-b02197adccb2)

O processo de criação de uma variável é simples. Basta clicar em Adicionar Variável e fornecer um par de informações, ou seja, uma chave e um valor. No exemplo a seguir, foram definidas duas chaves, uma denominada **DOCKER\_ID**, que contém o valor do nome do usuário na plataforma do Hub Docker; e a outra denominada **DOCKER\_TOKEN**, que contém o valor do `DOCKER_TOKEN` criado anteriormente.

![Opção de adição de variáveis para uso nos scripts CI/CD](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKV9K0Ox5o2NlBYoJjC%2F-MKV9lydv2gmIxIa4FFt%2Fgitlab-14.png?alt=media\&token=0af9c619-0cba-4f2c-af3d-b04df10fd00f)

![Exemplo de Chave/Valor para uma variável](https://3410113680-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MAB46kX1pdahHt_uEJC%2F-MKVAgcXgvaRiu-InydK%2F-MKVAko7-VoKoLCpZKdu%2Fgitlab-15.png?alt=media\&token=6f5d1568-66d3-4e9b-9c6e-d1b002910b4a)

