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.