Следите за последней папкой на предмет изменений в TeamCity

Я работаю над настройкой CI для своего веб-сайта с помощью TeamCity 8. Для веб-сайта это просто, поскольку я просто копирую всю папку.

Но для наших обновлений SQL мы настроили его так, чтобы с каждым выпуском у нас была отдельная папка. Например:

db
  update
    001
    002
    003
    ...
    018

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

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

Это может быть невозможно, хотя, так что обращаясь к сообществу. Если это имеет значение, наша VCS - это Git/Github.

2 ответа

Вы могли бы сделать структуру как:

db
  update
    001
    002
    003
    004
    ...
    current

Тогда внутри текущей папки выглядит так:

004-Script-1.sql
004-Script-2.sql
004-Script-3.sql

Ваша сборка TC будет запускать любой скрипт в current папку, а затем переместите сценарий на основе первой части имени в соответствующую папку. Вы должны были бы по порядку:

  1. Создайте папку, если она не существует.
  2. Переместите файлы в правильные папки
  3. Сделайте git pull, зафиксируйте все измененные файлы и нажмите

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

В качестве альтернативы вы можете использовать bash, чтобы найти самое высокое имя папки в этой папке и просто запустить все внутри нее (ниже предполагается, что вы находитесь в каталоге загрузки):

$ ls
001    002    003    004    005    026    124    204
$ LAST=`exec ls | sed 's/\([0-9]\+\).*/\1/g' | sort -n | tail -1`
$ echo $LAST
204

Это предполагает, что все в самой верхней папке должно быть запущено и перезапущено, если вы не работали с логикой.

Вы можете определить параметр сборки по имени, которое может выглядеть следующим образом: cur.release.folder.numbeer и попросить его запросить, пытается ли пользователь принудительно запустить сборку в определенной папке.

Trigger rules: +:/db/update/%cur.release.folder.number%/**

ИЛИ ЖЕ

Всякий раз, когда вы вручную создаете папку, добавьте логику в свой проект, чтобы установить свойство с именем cur.release.folder.number & на этапах сборки teamcity, обработайте его с дополнительным шагом.

Шаг сборки № 1 будет рассчитывать последний номер папки может быть с помощью простого сценария оболочки. Ты можешь использовать -Dparamname=%teamcity.build.checkoutDir%/tmpFileHoldingFolderNoInfo.txt

Шаг сборки 2: используйте то же самое в правилах триггера, что и выше - по умолчанию установлено пустое значение и используйте значение из шага №1

Другие вопросы по тегам