я был там много лет назадАвтоматическое развертываниеЯ сделал небольшое усилие в этом отношении и вложил свои знания вНебольшой шаг в автоматизированном развертывании, большой шаг в перемещении кирпичиков переднего планаВыложено в этом блоге. Спасибо двум пользователям сети@_shanks
и@TomCzHen
, побудил меня продолжить оптимизацию процесса развертывания. Эта статья в основном посвящена процессу автоматического развертывания, чтобыУправление версиямииРациональность процессаНекоторые улучшения были сделаны и в других аспектах, а благодаря стандартизированному рабочему процессу пользовательский интерфейс стал лучше!
PS: Если вам нужно знать CI/CD напрямую, нажмите здесь ->Потратьте полдня, чтобы легко создать интерфейсный рабочий процесс CI/CD..
Журнал изменений создается автоматически
Я сделал это вручную раньшеCHANGELOG.md
, используемый для записи журнала обновлений, я немного устал от работы, и он не очень стандартизирован. К счастью, предшественники посадили деревья, поэтому я подумал об использованииconventional-changelog-cli
Автоматически генерировать и обновлятьCHANGELOG.md
, действительно полезно!
Что такое обычный список изменений
Generate a changelog from git metadata
в соответствии сgit
Метаданные генерируют журналы изменений, аconventional-changelog-cli
Это связанный инструмент командной строки.
Установить обычный-changelog-cli
npm install -g conventional-changelog-cli
Инициализировать и сгенерировать CHANGELOG.md
cd my-project
conventional-changelog -p angular -i CHANGELOG.md -s
Приведенные выше команды основаны на последнейFeature
, Fix
, Performance Improvement or Breaking Changes
и Т. Д.commit
генерация или обновление записиCHANGELOG.md
. Если вы хотите использовать все предыдущиеcommit
генерация записи завершенаCHANGELOG.md
, затем попробуйте следующую команду:
conventional-changelog -p angular -i CHANGELOG.md -s -r 0
Рабочий процесс
Добавьте код в тестовую область
В этом шаге нет ничего особенного, просто запускайте код каждый день, а затем добавляйте содержимое рабочей области в область подготовки.
git add .
Стандартное сообщение фиксации
Стандартное сообщение фиксации обычно делится на три части: заголовок, тело и нижний колонтитул. Заголовок содержит тип, объем, тему и другие части, которые используются для описания типа фиксации, области влияния и краткого описания фиксации. Тело представляет собой подробное описание, которое можно написать в несколько строк. Нижний колонтитул в основном используется для описания несовместимых изменений (Breaking Change) или для закрытия проблем (Closes #issue).
Формат следующий:
<type>(<scope>): <subject>
<body>
<footer>
Возьмите каштан:
feat(支持自动部署): 结合conventional-changelog,配合部署脚本完成部署任务
conventional-changelog是一个很好的工具,用于自动生成changelog,再配上自定义的部署脚本,整个部署流程就显得更规范了
Breaking Change: 比较大的更新
Closes #315
в,Header
является обязательным,Body
иFooter
Можно опустить.
После того, как вы получите общее представление о спецификации, вы можете использовать инструмент.Здесь мы используемcommitizen
.
npm install -g commitizen
Затем выполните следующую команду в корневом каталоге проекта:
commitizen init cz-conventional-changelog --save --save-exact
После успешного запускаpackage.json
Будет добавлено следующее:
"devDependencies": {
"cz-conventional-changelog": "^3.1.0"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
git commit
Используйте этот шагgit cz替代
,cz
означаетcommitizen
, через интерактивную командную строкуcommit
работать.
PS D:\robin\frontend\spa-blog-frontend> git cz
cz-cli@4.0.3, cz-conventional-changelog@3.1.0
? Select the type of change that you're committing: feat: A new feature
? What is the scope of this change (e.g. component or file name): (press enter to skip) 支持自动部署
? Write a short, imperative tense description of the change (max 86 chars):
(37) 结合conventional-changelog,配合部署脚本完成部署任务
? Provide a longer description of the change: (press enter to skip)
? Are there any breaking changes? No
? Does this change affect any open issues? No
[master ee41f35] feat(支持自动部署): 结合conventional-changelog,配合部署脚本完成部署任务
3 files changed, 15 insertions(+), 3 deletions(-)
Номер версии процесса, обновить CHANGELOG
Тогда мы должны обновитьnpm
Номер версии пакета вместе сnpm version
иconventional-changelog
использование, может быть обновлено в то же времяCHANGELOG.md
.
Хорошо, давайте сначала подготовим скрипт:
"scripts": {
"start": "vue-cli-service serve",
"build": "vue-cli-service build",
"deploy": "node deploy",
"version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md",
"postversion": "npm run deploy"
}
Выберите обновление в соответствии с актуальной версиейpatch/minor/major
Версия. Предположим, мы обновляемminor
номер версии, то команда операции выглядит следующим образом:
npm version minor -m '特性版本更新'
Выполнение этой команды обновитpackage.json
серединаversion
поле,
также будет выполнятьconventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md
,продлитьCHANGELOG.md
.
После выполнения этой команды вы увидитеCHANGELOG.md
был изменен.
npm-хук для запуска скрипта развертывания
пройти черезpostversion
Хук для запуска скрипта развертыванияnode deploy
чтобы начать развертывание.deploy.js
Содержимое файла следующее:
const { execFile } = require('child_process');
const version = process.env.npm_package_version;
execFile('deploy.sh', [version], { shell: true }, (err, stdout, stderr) => {
if (err) {
throw err;
}
console.log(stdout);
});
используется здесьnodejs
изchild_process
Модуль выполняет дочерний процесс, вызываяexecFile
казненdeploy.sh
, и воляnpm
Номер версии пакета передается в качестве параметраdeploy.sh
.
deploy.sh
Содержимое файла следующее:
#!/bin/bash
npm run build
htmldir="/usr/share/nginx/html"
uploadbasedir="${htmldir}/upgrade_blog_vue_ts"
appenddir=$1
uploaddir="${uploadbasedir}/${appenddir}"
projectdir="/usr/share/nginx/html/blog_vue_ts"
scp -r ./dist/. txcloud:${uploaddir}
ssh txcloud > /dev/null 2>&1 << eeooff
ln -snf ${uploaddir} ${projectdir}
exit
eeooff
echo done
Главное, что делает приведенная выше команда, это:
-
npm run build
Выполнение задач по сборке - будет строить
dist
Содержимое папки передается черезscp
Он передается на сервер, и каждая версия отличается номером версии. -
nginx
настроен на мониторинг80
порт, указывая на/usr/share/nginx/html/blog_vue_ts
, и я будуblog_vue_ts
снова указать наupgrade_blog_vue_ts
в каталоге версии, напримерupgrade_blog_vue_ts/0.5.4
. Каждый раз, когда выпускается версия, приведенный выше сценарий изменяет программную ссылку, чтобы она указывала на целевую версию, напримерupgrade_blog_vue_ts/0.6.0
для завершения перехода версии.
Здесь я использовал мягкое соединение, чтобы улучшить предыдущий сценарий развертывания, который может хранить различные папки с историческими версиями на сервере без учета обработки.index.html
Проблема отделения от статических ресурсов.
Комбинация настоятельно рекомендуетсяНебольшой шаг в автоматизированном развертывании, большой шаг в перемещении кирпичиков переднего планаПрочитайте эту статью вместе.
lrwxrwxrwx 1 root root 47 Feb 3 21:35 blog_vue_ts -> /usr/share/nginx/html/upgrade_blog_vue_ts/0.6.0
Если вы хотите откатить версию, вы также можете реализовать это, модифицировав софт подключение, что более удобно.
Нажмите на удаленный
Наконец, не забудьте поставить кодpush
в удаленный репозиторий.
git push
Список измененийchangelog
Просмотр также стал очень удобным, то, что было изменено, понятно с первого взгляда, и вы можете сразу перейти кcommit
история,issue
Ждать.
интермедия
Как видите, я прохожуdeploy.js
называетсяdeploy.sh
. Я хотел прямоnpm scripts
вызыватьdeploy.sh
И передается параметр номера версии, но я пробовал несколько способов его записи, поэтому я также запишу его здесь.
"deploy": "deploy.sh npm_package_version"
"deploy": "deploy.sh $npm_package_version"
похожеnpm scripts
вызыватьsh
При написании сценариев вы можете записывать только литеральные параметры, а передача переменных в качестве параметров, похоже, не работает.
Такая дословная формулировка следующих параметров возможна, но ощущение несколько тупое, и это не соответствует тематике и автоматизированному развертыванию.
"deploy": "deploy.sh 0.6.0"
Так что я все еще выбираю пройтиdeploy.js
звоните как посредникdeploy.sh
из.
Эпилог
Следует признать, что процесс развертывания, о котором я упоминал выше, основан на примере моего личного проекта, который может быть не очень стандартизирован, но его можно рассматривать как полный набор процессов развертывания благодаря моему собственному пониманию и исследованию, и не занимать.jenkins
и другие инструменты. После этого учебного опыта автоматического развертывания я верю в изучение и использованиеjenkins
станет легче. Далее я продолжу оптимизировать и стандартизировать процесс развертывания,jenkins
Конечно, это в моем расписании.
- Лучше начать учиться сейчас, чем собирать пепел, Олли!
- Если вы считаете эту статью полезной, пожалуйста, ставьте лайки, подписывайтесь и поддержите волну, спасибо!
- Обратите внимание на общедоступный номерФронтенд Саймон, обменивайтесь и учитесь с автором!