Все это время, из-за быстрого темпа итерации командного проекта, журнал изменений и обновление версии каждого выпуска выполняются через человеческую плоть. Иногда я очень занят, и мне кажется, что я не могу вручную писать эти обновления. Новичкам в коллективе, иногда в экстренных случаях, еще более грязно, а старших одноклассников коллектива еще надо побеспокоить. Очевидно, что эти задачи не подходят для средств автоматизации.
Эта статья представляет собой учебник по автоматизации проектов. В сообществе есть много решений для четырех типов проблем. Сегодня основное введение здесьonventional-changelogСодержимое, связанное с программой. Если вы думаете или пытаетесь решить эту проблему, вы можете знать.
onventional-changelog
onventional-changelogотносится к конкретному проектуcommit
а такжеmetadata
Информация генерируется автоматическиchangelogs
а такжеrelease notes
серии инструментов, а во вспомогательныхstandard-versionВ случае с инструментами он может автоматически завершить генерацию за вас.version
,битьtag
, генерироватьCHANGELOG
и другие серии процессов.
Экологический основной модуль с обычным журналом изменений
- conventional-changelog-cli- основной инструмент командной строки обычного списка изменений
- standard-changelog- Инструмент командной строки для углового формата фиксации
- conventional-github-releaser- Инструмент публикации для Github с использованием метаданных git.
- conventional-commits-detector- Обнаружение ссылки на спецификацию сообщения COMMIT
- commitizen- Простая спецификация фиксации для разработчиков
- commitlint- зафиксировать инструмент Lint
Вышеonventional-changelogНесколько основных модулей, имеющих экологическое значение, эти инструменты часто используются вместе в реальной работе, конечно, это также необходимо определить в соответствии с вашей собственной ситуацией. Пространство ограничено, сегодня мы в основном представимcommitizen,conventional-changelog-cli,standard-versionэти три инструмента.
commitizen
commitizenЭто инструмент для стандартизации информации о фиксации git. В отсутствие спецификаций информация о фиксации разработчиков часто является произвольной, что делает информацию о фиксации бесполезной. но когда ты делаешьgit log
,code review
,записыватьchangelog
и так далее, хорошо
Спецификация коммита особенно важна.
коммитизен установить
$ npm install -g commitizen
# 或者本地安装
$ npm install --save-dev commitizen
Установите адаптер (адаптер)
Поскольку разные проекты строятся по-разному, commitizen поддерживает расширение разных адаптеров для удовлетворения разных требований сборки. В этой статье в основном используетсяcz-conventional-changelog
Конечно, вы также можете выбрать другие адаптеры в зависимости от конкретной ситуации, подробнеепожалуйста, посмотри.
$ npm install -g cz-conventional-changelog
После завершения глобальной установки нам нужно добавить в корневую директорию проекта.czrc
Конфигурационный файл, содержание файла следующее:
// path 用来指定适配器
{ "path": "cz-conventional-changelog" }
локальная установка
$ npm install cz-conventional-changelog --save-dev
# 或者使用 commitizen 工具
$ commitizen init cz-conventional-changelog --save-dev --save-exact
Инструмент commitizen автоматическиpackage.json
Добавьте соответствующую конфигурацию в конфигурацию следующим образом:
"config": {
"commitizen": {
"path": "cz-conventional-changelog"
}
}
После установки и добавления мы можем использоватьgit cz
подстановка командыgit commit
приходи в употребление. Мы модифицируем файл иgit add
После этого черезgit cz
попытайся:
Как видите, git cz предоставляет несколько вариантов коммитов, а именно:
- использовать новые функции
- исправить ошибку
- обновление документации документов
- форматирование кода стиля, обновление пунктуации
- рефакторинг кода рефакторинг
- оптимизация производительности
- тестовое тестовое обновление
- сборка системы сборки или обновление зависимостей пакета
- ci Конфигурация CI, файлы сценариев и т. д. обновлены
- рутинное обновление не-src или тестовых файлов
- отменить откат фиксации
При его использовании мы должны выбирать его в соответствии с конкретными изменениями проекта. Если вы хотите изменить введенную информацию о коммите, мы можем передатьgit reset
команду исправить.
Следует отметить, что добавить инструмент фиксации недостаточно, для обеспечения согласованности формата фиксации настоятельно рекомендуется не забыть интегрироватьcommitlintинструмент, подходитgit commit-msg hookЧтобы использовать, я не верю в введение здесь, вы можете проверить официальную документацию для деталей.
conventional-changelog-cli
conventional-changelog-cliРекомендуемые по умолчанию критерии фиксации взяты изangular
Проект, помимо стандарта angular, на данный момент интегрируется сatom, codemirror, ember, eslint, express, jquery
Стандарт других предметов можно выбрать по своему вкусу.
Установить
# Help conventional-changelog --help
$ npm install -g conventional-changelog-cli
основное использование
$ conventional-changelog -p angular -i CHANGELOG.md -s
Параметры в приведенной выше команде-p angular
Используется для указания используемого стандарта сообщения фиксации, если вы хотите использоватьatom
стандарт:
$ conventional-changelog -p atom -i CHANGELOG.md -s
параметр-i CHANGELOG.md
означает отCHANGELOG.mdчитать журнал изменений,-s
Указывает, что журнал изменений для чтения и записи — это один и тот же файл. Следует отметить, что журнал изменений, сгенерированный приведенной выше командой, основан на изменениях (функция, исправление, критические изменения и т. д.) после последней версии тега, поэтому, если вы хотите сгенерировать все предыдущие
Журнал изменений, сгенерированный информацией о коммите, должен использовать эту команду:
$ conventional-changelog -p angular -i CHANGELOG.md -s -r 0
в-r
Указывает количество версий выпуска, необходимых для создания журнала изменений, по умолчанию — 1, все — 0.
специальные параметры
Некоторое общее содержимое в сгенерированном журнале изменений может быть изменено в соответствии с требованиями с помощью пользовательских параметров, таких как номер версии, адрес фиксации и т. д. Номер версии, сгенерированный в журнале изменений, взят изpackage.json
Получить поле версии из . Нам нужно изменить адрес хранилища фиксации соединенияpackage.json
серединаrepository
Address, адрес подключения по умолчанию для issuse в журнале изменений также основан наrepository
генерировать. Если вы используете стороннюю систему совместной работы (например, битбакет), вы можете использовать этот стандарт.conventional-changelog-angular-bitbucket. Или, например, мы используем Redmine для решения проблемы, а затем создаем журнал изменений.
можно использовать позжеreplaceИнструменты для обработки устаревших адресов в тексте:
$ replace 'https://github.com/myproject/issues/' 'https://redmine.example.com' CHANGELOG.md
Наконец, взгляните на грубо сгенерированный эффект:
Обычный журнал изменений. Можно увидеть дополнительные параметры конфигурации.здесь.
standard-version
standard-versionявляется последователемСемантическое управление версиями (semver)а такжеСтандартная спецификация сообщения фиксацииверсия и инструмент автоматизации журнала изменений. При нормальных обстоятельствах мы будем выполнять следующие операции выпуска версии в основной ветке:
1. git pull origin master
2. 根据 pacakage.json 中的 version 更新版本号,更新 changelog
3. git add -A, 然后 git commit
4. git tag 打版本操作
5. push 版本 tag 和 master 分支到仓库
Среди них 2, 3 и 4 — это задачи, которые инструмент стандартной версии будет выполнять автоматически.С помощью локальных сценариев оболочки можно автоматически выполнить серию выпусков версий.
Установить и использовать
Здесь я все еще рекомендую глобальную установку:
$ npm install -g standard-version
# 或者
$ npm install --save-dev standard-version
воплощать в жизнь:
# Help standard-version --help
$ standard-version
Выполните команду стандартной версии, и мы увидим в консоли информацию журнала всего процесса выполнения.Вот некоторые часто используемые параметры, на которые необходимо обратить внимание:
--release-as, -r указать номер версии
По умолчанию инструмент автоматически генерирует номер версии в соответствии с основными, дополнительными правилами или правилами исправления.Например, если версия в вашем package.json равна 1.0.0, то номер версии после выполнения будет Да: 1.0.1 . Персонализация может быть выполнена:
$ standard-version -r minor
# output 1.1.0
$ standard-version -r 2.0.0
# output 2.0.0
$ standard-version -r 2.0.0-test
# output 2.0.0-test
Следует отметить, что названия версий здесь не являются случайными символами, а должны следоватьСемантическое управление версиями (semver)нормативный
--prerelease, -p название предварительной версии
Используется для создания предварительных версий, если номер текущей версии, например, 2.0.0.
$ standard-version --prerelease alpha
# output 2.0.0-alpha.0
--tag-prefix, -t префикс тега версии
Используется для префикса сгенерированных тегов тегов, например, если номер предыдущей версии — 2.0.0, то:
$ standard-version --tag-prefix "stable-"
# output tag: stable-v2.0.0
Мы можем использовать больше вышеуказанных параметров, и есть другие параметры, которые можно передать черезstandard-version --help
Проверить.
Интегрировать нпм
Наконец, не забудьте интегрировать команду в npm.package.json
и используется со сценариями оболочки следующим образом:
"scripts": {
"release": "./scripts/release.sh",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md && npm run changeissueurl",
"changeissueurl": "replace 'https://github.com/myproject/issues/' 'https://redmine.example.com/' CHANGELOG.md"
},
// 配置好后使用 npm run 执行发布
$ npm run release
Добавить кrelease.sh
сценарий:
#!/bin/bash
# Release branch
master="master"
prefix="DTinsight_v"
git pull origin $master
echo "Current pull origin $master."
# Auto generate version number and tag
standard-version -r $release --tag-prefix $prefix
git push --follow-tags origin $master
echo "Git push origin $master"
echo "Release finished."
Приведенный выше скрипт выполняет простое ветвление.pull
, воплощать в жизньstandard-version
и окончательная версияpush
Если вы хотите сделать некоторые настраиваемые параметры выполнения, вам необходимо выполнить индивидуальную модификацию.
наконец
Инжиниринг проекта — очень интересная вещь, с помощью автоматизированных инструментов можно эффективно улучшить ремонтопригодность и качество проекта, а также избежать многих неопределенностей. Если вы обнаружите эти проблемы в своей работе, и не хотите продолжать решать эти проблемы через человеческую плоть, то попробуйте скорее~