Непрерывная интеграция для обновления личных сайтов, автоматизированных сборок и развертываний

внешний интерфейс сервер GitLab

предисловие

использовать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/ci

3.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Вы можете видеть, что бегун был успешно связан.

GitLab-Runner创建成功

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.купон


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