Create Introdução ao gitlab ci authored by Lucas Estevao de Andrade's avatar Lucas Estevao de Andrade
O laboratório GQS utiliza o **GitLab** como ferramenta para gerenciar seus projetos.
O GitLab possui uma ferramenta chamada **gitlab-ci**, que possibilita o desenvolvedor de planejar, montar e executar fluxos de integração contínua em seus projetos.
Neste guia, vamos mostrar os principais componentes desta ferramenta, e explicar como eles funcionam.
### A linguagem básica do gitlab-ci
As pipelines do **gitlab-ci** são escritas em um arquivo com a extensão **.yml**, de nome **gitlab-ci.yml** que deve ficar na raiz do projeto.
Este arquivo conterá os scripts que deverão ser executados ao iniciar o fluxo de integração contínua.
Estas pipelines são compostas pelos seguintes componentes:
- **Jobs:** Que define o que deve ser feito, como um job para realizar um deploy ou rodar os testes, por exemplo.
- **Stages (ou estágios):** É composto por jobs, e é usado para definir em que ordem os jobs devem rodar.
O arquivo **gitlab-ci.yml**, em sua estrutura básica, terá os seguintes componentes:
- **Um valor `stages`**, contendo a lista de estágios do script.<br>
Por padrão, o os scripts do gitlab-ci possuem stages básicos, como `build`, `test` e `deploy`, mas o desenvolvedor pode usar o atributo `stages` para definir estágios especificos, como no exemplo:
```yml
stages:
- build
- test
- test_again
- deploy_on_dev
- deploy_on_prod
```
- **Uma sequência de jobs**, indicando o que deverá ser executado.<br>
Cada job pode possuir uma série de atributos, sendo seus atributos básicos:
- **`stage` (obrigatório):** Define em qual **stage** o **job** deverá ser executado.
- **`script` (obrigatório):** Define a sequência de comandos que deverão ser executados ao rodar o **job**.
- **`before_script` (opcional):** Um script a ser rodado antes de rodar o job, util para usar como preparação para executar alguma rotina, como instalação de dependências.
- **`when` (opcional):** Indica quando exatamente o job deverá ser rodado.<br>
Esta cláusula é útil quando queremos rodar algo manualmente, ou em uma situação
específica.<br>
Mais especificações na [documentação oficial](https://docs.gitlab.com/ee/ci/yaml/#when).
- **`only` (opcional):** Indica qual branch esse job deverá ser executado.<br>
É útil para quando temos um job de deploy, por exemplo, que deverá ser executado apenas
na branch master.
Aqui temos um exemplo de arquivo **gitlab-ci.yml** contendo todos os componentes citados:
```yml
stages:
- build
- test
- deploy
build application 1:
stage: build
script:
- building application 1...
build application 2:
stage: build
script:
- building application 1...
test application:
stage: test
when: manual
before_script:
- install test dependencies...
script:
- test application...
deploy application:
stage: deploy
only: master
script:
- deploy application...
```
Este script produzirá a seguinte pipeline:
![Captura_de_Tela_2022-10-23___s_22.30.42](uploads/f81ad766f4f8dcf111f92033e8890094/Captura_de_Tela_2022-10-23___s_22.30.42.png)
Os **stages** serão executados na mesma ordem definida no valor `stages`.<br>
O motor do **gitlab-ci** tentará executar todos os jobs dentro de um stage em paralelo, e cada stage sequencialmente!
Jobs manuais, como o `test application` do exemplo, deverão ser executados manualmente através da interface de pipelines do próprio GitLab!
Com estas informações, o desenvolvedor já pode criar pipelines para a maioria dos casos de uso.
Para mais informações, ou especificações mais avançadas, favor ver na [Documentação oficial da linguagem gitlab-ci](https://docs.gitlab.com/ee/ci/yaml/).