предисловие
использовать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-канал моего личного блога:База мистера Вана