|
|
|
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:
|
|
|
|

|
|
|
|
|
|
|
|
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/). |