предисловие
использоватьmarkdown+HexoНаписание статей, общий опыт уже большой. Это сэкономило мне много времени в процессе написания.
Однако ложка дегтя в том, что при публикации нужно вручную вводить команду,buildхороший файл, воспользуюсь ещеscpРазвернуть на сервере.
Эта статья используется для документирования процесса решения этой болевой точки. Принятое решениеНепрерывная интеграция.
Вот обзор сервера, который я использую для развертывания своего личного сайта:
Сервер — Alibaba Cloud ECS
Система - CentOS 7
Инструмент управления репозиторием Git — Gitlab (9.0.0)
ЦП - 1 ядро
Оперативная память — 2 ГБ (версия для нищих 💔)
Как правило, зарегистрируйтесьGitLab-RunnerСервер и сервер, на котором развернуты рабочие файлы, разделены.
Поскольку я беден, у меня только один сервер, поэтому оба развернуты вместе, так что не беспокойтесь об этом слишком сильно.
1. Непрерывная интеграция
Непрерывная интеграция, или сокращенно CI, относится к процессу, в котором код разработки часто объединяется с основной частью и всегда остается в готовом к выпуску состоянии. который содержитНепрерывная сборкаа такжеНепрерывный выпуск.
GitLab 8.0 и выше предоставляет услуги непрерывной интеграции. Просто добавьте.gitlab-ci.ymlфайл, а затем добавитьRunner, для непрерывной интеграции.
Моя общая идея реализации автоматической публикации блогов:
Добавить кRunnerдля мониторингаgit pushоперации, затем используйте.gitlab-ci.ymlдля руководства выполнением шагов и, наконец, используйтеshellСценарий копирует целевые файлы в указанный каталог.
2. Зарегистрируйте бегуна
Условие: пожалуйста, погуглите сами
gitlab-ci-multi-runnerУчебник по установке.
1. Проверьте необходимую регистрациюURLа такжеtoken
Браузер открывает проект GitLab и переходит кSettings-CI/CD Pipelinesниже вы можете увидетьSpecific Runnersблок, в основном имеет следующее содержание:
How to setup a specific Runner for a new project
1.Install a Runner compatible with GitLab CI (checkout the GitLab Runner section for information on how to install it).
2.Specify the following URL during the Runner setup:
http://gitlab.***.com/ci3.Use the following registration token during setup: TB8nknzg1woVb4pCx666 Start the Runner!
Пункт 2 из которыхURLи пункт 3token, зарегистрированRunnerтребуется.
RunnerблагодаряtokenЗарегистрируйтесь, чтобы следить за соответствующимURL.
2. Настроить на сервереGitLab-Runner
Здесь я использую SecureCRT для подключения к серверу и делаю следующее:
// 1.运行命令
sudo gitlab-ci-multi-runner register
// 2.根据提示输入`URL`
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab.***.com/ci
// 3.根据提示输入`token`
Please enter the gitlab-ci token for this runner:
TB8nknzg1woVb4pCx666
// 4.然后输入runner的描述
Please enter the gitlab-ci description for this runner:
wall-runner
// 5.输入标签,可以多个,用逗号隔开即可
Please enter the gitlab-ci tags for this runner (comma separated):
test
// 6.是否运行无此标签的构建
Whether to run untagged builds [true/false]:
true
// 7.将Runer锁定到当前项目
Whether to lock the Runner to current project [true/false]:
true
// 8.选择Runner的类型
Please enter the executor: ssh, docker+machine, kubernetes, docker, docker-ssh, parallels, shell, virtualbox, docker-ssh+machine:
shell
Таким образом,GitLab-RunnerСоздан успешно. Обновите страницу браузера, вSettings-CI/CD PipelinesВы можете видеть, что бегун был успешно связан.
3. Конфигурация.gitlab-ci.yml
В корневом каталоге проекта, куда вы хотите добавить непрерывную интеграцию, создайте.gitlab-ci.ymlфайл, напишите шаги сборки.
Прежде чем писать, сначала получите общее представление о методе письма:
# 定义stages
stages:
- install
- deploy
# 定义需要缓存的文件
cache:
paths:
- node_modules/
# 定义任务
job1:
stage: install
script:
- cnpm install
only:
- master
# 定义任务
job2:
stage: deploy
script:
- bash pub.sh
only:
- master
-
stagesОпределение ключевого словаPipelineПоследовательность различных этапов сборки в -
cacheКлючевые слова определяют каждый этап сборки, файлы, которые не нужно очищать - Каждая фаза сборки имеет свой собственный псевдоним, как в примере
job1а такжеjob2. есть и настоящиеstageимя дляstagesПорядок идентификаторов в -
scriptИспользуется для определения команд, которые необходимо выполнить для текущей фазы сборки. -
onlyОперация push, используемая для указания, какая ветвь Git должна запускать автоматическую сборку.
Вот кто яblogПроектные приложения.gitlab-ci.yml
# 持续集成
stages:
- install
- build
- minify
- deploy
cache:
paths:
- node_modules/
- public/
- db.json
# 安装依赖
install_npm:
stage: install
script:
## - cnpm install hexo-cli@1.1.0 -g ## 同一台服务器,不用多次安装
- cnpm install
only:
- master
# 编译,生成静态文件
build_public:
stage: build
script:
- npm run build
only:
- master
# 压缩文件
mini_file:
stage: minify
script:
- npm run minify
only:
- master
# 部署
deploy:
stage: deploy
script:
- bash pub.sh
only:
- master
4. Сценарии оболочки для развертывания
В предисловии одна из болевых точек упоминалась в том, чтоscpФайл развертывания. Из-за скорости сети каждый раз, когда я бегуscpКоманд приходится ждать несколько минут, компьютер нельзя выключать. Вы должны дождаться завершения передачи.
После перехода на непрерывную интеграцию нет необходимости запускать команды локально, и все они выполняются на сервере.
Что может заменить этот шаг передачи файла, так это написатьShellСкрипт позволяет серверу автоматически копировать файлы в соответствующий каталог.
Ниже мое приложениеShellсценарийpub.sh
#!bin/bash
cp -f -r -v ./public/* /mnt/blog/
эффект заключается вpublicСкопируйте все файлы из папки в/mnt/blog/Вниз.
5. Проблемы с разрешениями
Поскольку я запускаю команду на том же сервере, то текущийRunnerПроцесс должен иметь права на запись и чтение в соответствующей папке.
Итак, я дал права на чтение и запись нескольким папкам.Runnerобработать.
использоватьchownКоманда для изменения прав владельца папки:
chown wall-runner 文件路径
еслиRunnerСервер и сервер производственной среды не зависят друг от друга, вы можете использоватьsshспособ подключения. Настройте ключ и обойдите проверку отпечатков пальцев.
6. Наслаждайтесь приятной непрерывной интеграцией
После приведенной выше конфигурации каждый разpushкод дляmasterветвь.RunnerПосле прослушивания операции он запустит автоматическую сборку и завершит развертывание.
Таким образом, когда я публикую новую статью, мне нужно нести ответственность только за размещениеmarkdownзаписывать,pushкод дляGitLab. Для других работ сервер сделает это для меня автоматически.
Написав хорошую статью, я также могу спокойно закрыться и отдохнуть, не заботясь о других вещах.
Кроме того, каждая запись сборки хранится в GitLab. допустимыйPipelinesчтобы увидеть результаты каждой сборки.
также доступен вREADME.mdДобавлены значки состояния сборки:
Если вам это нужно, просто купите сервер и закиньте его, это весело🌚
Подключен к облачному серверу Alibaba.купон
Друзья, которым нравятся мои статьи, могут подписаться на меня следующими способами:
- "звезда"или"смотреть"мойGitHub blog
- RSS-канал моего личного блога:База мистера Вана