После помещения изменений (push) на сервер следует выполнять только задачи, не требующие много ресурсов. Ресурсоёмкие задачи можно отложить на время минимальной нагрузки сервера. Для этого нужно:

  • в секциях файла .gitlab-ci.yml, запускающих задачи с высокой нагрузкой, добавить

only:
    - schedules

подробнее это описано здесь

  • в веб-интерфейсе в меню CI/CD / Расписания добавить Новое расписание и назначить исполнение задачи на время, когда нагрузка на сервер минимальна.

Для пропуска запланированной задачи в исполняемый скрипт нужно добавить проверку условия запуска. Например, чтобы отменить запуск компиляции, если за последний день (86400 секунд) не было изменений, можно оформить .gitlab-ci.yml примерно так:

nightly-job:
    only:
        - schedules
    script:
        - "[ $(($(date +%s)-$(git log -1 --date=format:%s --format=%cd))) -gt 86400 ] && exit 0"
        - make