2016-09-21 1 views
7

Я ищу хороший процесс для управления номером версии моего проекта, когда моя главная ветка имеет защиту ветвления GitHub.Как увеличить номера версий в защищенных ветвях GitHub?

В идеальном мире, когда вы слились с веткой «выпуска», ваш сервер непрерывной интеграции запускал свои тесты, а затем автоматически увеличивал номер версии вашего проекта и возвращался в вашу систему SCM.

Однако с защитой от ветвления вы не можете зафиксировать свою ветку без запроса Pull, поэтому у вас есть catch-22, где ваш CI-сервер не может нажать на вашу защищенную ветку, когда пытается обновить номер версии.

Я могу думать о нескольких рабочих обходных, все из которых являются субоптимальными:

  1. соорудить систему, чтобы ваш сервер CI будет делать PR для обновления версии. Я не уверен, что вы даже можете сделать это с GitHub, но даже если это так, создается два запроса Pull для каждого «реального» PR, что неудобно.
  2. Удалить Защиту Branch - теперь каждый может проталкивать что-либо к ветвям, и вы должны управлять своими разработчиками через ручного процесс
  3. Обновления версии вручную до запроса тягового. это немного лучше, чем # 2, но это открывает двери для разработчиков, чтобы делать ошибки при выборе номера новой версии или слияния нужного номера версии с неправильной ветвью.

Я надеюсь, что есть другие варианты, о которых я не думал.

Мы используем Javascript и npm, но я считаю, что проблема связана с языком несовместима, конечно же, такая же проблема будет существовать с Java и Maven, например.

ответ

1

Я использовал git tags для автоматизации управления версиями с помощью Jenkins. Поэтому каждый раз, когда работа выполнялась, он принимал последние tag и увеличивал его. Поскольку теги отличаются от коммитов, добавление тега не конфликтует с Branch Protection.

# get last tag 
last=$(git describe --abbrev=0 --tags) 
# increment and tag again 
git tag $(($last + 1)) 
git push origin $(($last + 1)) 

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

/* 
* Gets the version name from the latest Git tag 
*/ 
def getVersionName = { -> 
    def stdout = new ByteArrayOutputStream() 
    exec { 
     commandLine 'git', 'describe', '--tags' 
     standardOutput = stdout 
    } 
    return stdout.toString().trim() 
} 

Я уверен, что вы можете использовать аналогичную установку с Javascript.

+0

Но это не значит, что версия id вернулась в проект правильно? – JBCP

+0

Информация о версии отсутствует в проекте вообще. Его в «git tag», который jenkins ставит каждый раз, когда видит обновление на главной ветке. Проект просто знает, как вывести информацию о версии из последнего 'тега'. Так что да, нет, чтобы вернуться назад. –

+0

@JBCP, пожалуйста, отметьте ответ как принятый, если это поможет. –

Смежные вопросы