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.
Por padrão, o os scripts do gitlab-ci possuem stages básicos, comobuild
,test
edeploy
, mas o desenvolvedor pode usar o atributostages
para definir estágios especificos, como no exemplo:
stages:
- build
- test
- test_again
- deploy_on_dev
- deploy_on_prod
O atributo stages
também indica em qual ordem os estágios serão executados.
-
Uma sequência de jobs, indicando o que deverá ser executado.
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.
Esta cláusula é útil quando queremos rodar algo manualmente, ou em uma situação específica.
Mais especificações na documentação oficial. -
only
(opcional): Indica qual branch esse job deverá ser executado.
É ú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:
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
.
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! (falaremos mais sobre isso em breve).
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.