Инкрементное обновление в gitlab-ci - PullRequest
0 голосов
/ 19 октября 2018

Сообщество!

Компания, в которой я работаю, движется в направлении Git и Gitlab-CI.У нас довольно большая кодовая база - для загрузки исходников требуется ~ 10 минут, для загрузки дополнительных материалов из nexus - ~ 20 минут, а для сборки - ~ 50 минут.Таким образом, абсолютно необходимо иметь инкрементные сборки - таким образом, мы можем получать исходные коды и создавать только обновленные файлы за несколько минут, а не> 1 ч.

К сожалению, стратегии по умолчанию для CI GitLab (в частности, выборки) не работают для инкрементныхbuild, так как они имеют жестко закодированный 'git clean -ffdx', который удаляет все неотслеживаемые файлы, поэтому требуется полная перестройка.Я закончил разработку своей собственной последовательности обновлений:

  • git init
  • git fetch --tags $ CI_REPOSITORY_URL + refs /heads / : refs / remotes / origin /
  • git config remote.origin.url $ CI_REPOSITORY_URL
  • git checkout -B $ CI_BRANCH_NAME origin / $ CI_BRANCH_NAME

Этот скрипт, кажется, работает на свежемкомпьютер (действует как клон), а также обновление существующего репо.В то же время я не уверен, что он работает должным образом, поскольку он работает почти бесшумно.

Вопрос 1: Является ли эта правильная последовательность для проверки на произвольной ветви?Вопрос 2: Требуется ли после него команда git merge или git pull?Вопрос 3: есть ли способ получить список измененных файлов с этим конкретным обновлением (что-то вроде git pull делает).Это было очень удобно в нашей предыдущей системе CI для устранения проблем сборки. Вопрос 4 (относится к # 3): есть ли способ получить список коммитов в текущем обновлении?Это не имеет значения при перемещении между удаленными ветвями, но может быть очень полезно при обновлении одной и той же ветви

1 Ответ

0 голосов
/ 20 октября 2018

Необходимо настроить свойство cache в заданиях CI для неотслеживаемых файлов, поддерживающих инкрементные сборки.Перечисленные вами пути будут кэшироваться между заданиями, так что вы можете делать такие вещи, как инкрементные сборки.

В качестве быстрого начала вы можете кэшировать все неотслеживаемые файлы, просто untracked в true.

ci_job:
  cache:
    untracked: true
...