Por: @jonasc Publicado em: 2021-12-10
Gitlab Schedules para agendamento de pipelines
Como usar o agendador de pipelines do Gitlab para automatizar tarefas.
Aplciação prática para a iTFLEX: Hoje temos algumas tasks rodando na crontab da intranet. Elas podem ser migrada para o Gitlab.
Sobre o CI / CD da iTFLEX
Nosso CI dos produtos no monorepo itflex/itflex
é gigante. Algumas situações podem ativar um pipeline, como:
- Push em alguma branch
- Merge de branch
- Execução manual de pipelines pela interface do Gitlab
- Agendamento de pipelines
- Ativação de pipelines através do bot da itflex (via trigger token)
Precisamos entender algumas situações:
- Quando um pipeline manual é executado pela interface, ele passa por todos os jobs (mesmo aqueles com condições
only:changes
) - Nosso CI tem vários condições para quando executar ou não um job
- Ex.: somente na branch master
- Ex.: Exceto na branch master
- Ex.: Exceto quando pipeline for via trigger token
refs:triggers
(bot itflex) - Ex.: Somente quando pipeline for via trigger token
refs:triggers
(bot itflex) - Ex.: Somente quando determinada variável for X valor (DEPLOY == tasks)
Entendido isso, se agendarmos um pipeline para atualizar as tasks da iTFLEX, ele não vai funcionar igual o pipeline criado pelo bot. Isso porque o nosso CI faz vários excepts para o bot e possui condições como, se DEPLOY == tasks, para saber se deve executar a job de deploy ou não.
Então antes de agendar um pipeline, precisamos adaptar nosso “CIzão” para funcionar adequadamente com os schedules.
Adaptando o CI
Como queremos que os schedules executem pipelines curtas, parecido com as do bot, em todas as jobs que houver except:refs:triggers
vamos adicionar except para schedules
:
except:
refs:
- triggers
- schedules
Desta forma, as pipelines de schedule ficam semelhantes as do bot, pois casam nas mesmas condições.
Criando schedules
Projeto > CI / CD > Schedules > New schedule

Pipeline agendado e executado:
Resultados
Neste formato, podemos criar pipelines para tarefas específicas agendadas.
Uma outra alternativa, não abordada neste spike, também seria includes condicionais para os arquivos de CI. Por exemplo: Incluir arquivo somente quando for uma pipeline agendada. https://docs.gitlab.com/ee/ci/yaml/includes.html#use-rules-with-include
Estes recursos podem ser usados para criar um projeto a parte focado somente em tarefas. Ou automatizar tarefas específicas no projeto.
Este estudo será usado como base para desativar as tasks da crontab da intranet e passar para o GitLab.