Набор систем контроля версий, принадлежащих интерфейсу! обновить! ! Не проси о помощи! ! !

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

предисловие

Прежде чем компания обновила интерфейсный код, ей нужно было удаленно перейти на сервер, а затем скопировать соответствующий упакованный код проекта в каталог. При частом обновлении бесполезно тратится время в середине, а версия с откатом также включает в себя операции резервного копирования и запоминания паролей и учетных записей при наличии нескольких серверов.Операции будут казаться громоздкими. В сочетании с большим количеством персонала безопасность сервера не может быть гарантирована. Планируется разработать набор интерфейсных решений для контроля версий. По прошествии всего 2020 года было переработано 3 основных версии, и, наконец, была завершена официальная версия 1.0. Включая загрузку версий, переключение, тестирование, онлайн, удаление, резервное копирование и другие функции, это хорошее решение внутренних проблем компании. Здесь я делюсь своими идеями трех версий (только идеи и часть кода), различные идеи и различные предложения приветствуются для обсуждения~

Версия 1 — на основе git и nodejs

Первоначальная идея была очень простой: поскольку git хорошо справляется с контролем версий, первым решением стало создание системы с его ядром.

1. Идеи

  1. Создайте проект git, в котором будут размещены упакованные файлы.
  2. Потяните этот git как локально, так и на стороне сервера
  3. После того, как локальный проект будет обновлен и упакован, отправьте git, и после того, как git сервера получит обновленную инструкцию, потяните ее, чтобы завершить обновление.

2. Очки знаний

  1. git hook (функция ловушки, запускаемая операцией git)
  2. nodejs

3. Яма

При нормальных обстоятельствах при получении обновления срабатывает хук git post-receive.Используя этот хук для выполнения git pull, обновление может быть завершено, но оно не может быть запущено правильно под Windows (я не знаю, почему, я надеюсь знать большой парень может наука, мяч хороший)

В-четвертых, конкретная реализация

Из-за ямы вынужден изменить образ мыслей.К счастью, pre-push (git commit) в git-хуке можно сработать корректно, затем построить на сервере службу node для получения запроса и перейти к соответствующему каталог git тянуть.

1. Локальный git-хук (pre-push)

Команда curl используется для прямой имитации запроса, но она не поддерживается в cmd Windows, поэтому вам необходимо установить команду curl (конкретный метод:woo woo woo.cn blog on.com/Zhu Zhenwei 9… .git/hooksПапка будет называть любой файл в ней какpre-pushи введите

#!/bin/sh
exec curl 192.168.0.83:1911/update?url=d:/wwwroot/dkdWeb/pages/copy

Запустите функцию ловушки для доступа к определенному порту на сервере перед отправкой, параметр url используется для поиска местоположения проекта и обновления.

2. Служба серверного узла

Для построения простейшего нод-сервиса здесь используется экспресс-фреймворк, в основном этот сервис используется для выполнения действия git pull update в разных проектах по разным параметрам при получении запроса.

var express = require('express');
var app = express();
var cmd = require("node-cmd");
//设置跨域访问
app.all('*', function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1');
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});

//写个接口
app.get('/update', function (req, res) {
    res.status(200);
    res.json('执行成功');
    if(req.query.url){
       setTimeout(function(){
          cmd.run("cd /d "+req.query.url+" & git pull");
       },5000)  
    }
});
//配置服务端口
var server = app.listen(1911, function () {
    var host = server.address().address;
    var port = server.address().port;
})

5. Недостатки

  1. Необходимо создать новый проект git, изменить конфигурацию git, а затем тянуть с обоих концов, слишком много приготовлений на ранней стадии.
  2. Нет функции контроля версий, для отката можно только переупаковать и залить код после отката.
  3. Как только папка проекта на стороне сервера изменится, при извлечении будут выявлены конфликты (часто)

6. Преимущества

  1. Управление версиями с помощью git
  2. Автоматические обновления выполняются с помощью обычных коммитов git.

Версия 2 - на основе nodejs

Хотя он основан на git, нет необходимости делать некоторые вещи с версией, но он также очень ограничен, и требуемый контроль версий не так детализирован, поэтому версия 2 отказывается от git и полностью использует nodejs для чтения и записи файлов. развита возможность распаковки файлов, и на этой основе реализовано визуальное управление.

1. Идеи

  1. Создайте новую веб-страницу на стороне сервера для визуализации
  2. Создайте папку, предназначенную для управления версиями на сервере.
  3. Создайте службу узла на сервере, прочитайте различную информацию о версии в папке и отобразите ее.
  4. При локальном доступе к веб-странице сервера загрузите сжатый файл и укажите информацию о версии.После получения сервером он сохраняется в папке управления версиями.
  5. После нажатия на веб-страницу в режиме онлайн распакуйте соответствующий сжатый пакет в каталог проекта и измените информацию о версии.

Окончательный эффект выглядит следующим образом:

2. Очки знаний

  1. nodejs

3. Яма

Поскольку загружается весь сжатый пакет, это будет приводить к тому, что на сервере будет появляться все больше и больше сжатых пакетов, а занимаемое хранилище будет становиться все больше и больше, поэтому сначала нужно загрузить в oss интерфейс, а затем уже полученный oss адрес будет загружен.

В-четвертых, конкретная реализация

1. Список предметов

Каждый проект представляет собой папку, прочитав папку в папке управления версиями, чтобы получить список проектов.

2. Информация о проекте

В каждой папке проекта есть два файла. Один используется для хранения адреса распаковки проекта, а второй — для хранения информации о версии.

3. Работа проекта

Все операции над проектами, в том числе выход в интернет, редактирование, удаление, добавление проектов, добавление версий и т. д., являются модификациями и дополнениями файлов или папок.

4. Онлайн

Выход в сеть на самом деле является операцией поиска адреса oss, на который указывает соответствующая версия, его загрузки, распаковки в соответствующий каталог и изменения информации о версии.

const express = require('express'),
    app = express(),
    bodyParser = require('body-parser'),
    checkToken = require('./checkToken'),
    fs = require('fs'),
    compressing = require("compressing"),
    tools = require('./tools/tools.js');;

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

//设置跨域访问
app.all('*', function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "*");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});

app.use(checkToken);

app.post('/toLine',async (req, res) => {
    let fdata = req.body.pAddr;
    let download = await tools.downloadFileAsync(req.body.ossAddr.replace('https', 'http'), __dirname + '\\download.zip');
    fs.exists(fdata, function (exists) {
        if (exists) {
            tools.delDir(fdata, false)
            compressing.zip.uncompress(__dirname + '\\download.zip', fdata, { zipFileNameEncoding: 'gbk' })
                .then(() => {
                    fs.unlink(__dirname + '\\download.zip', () => { });
                    tools.handleRes(res, true, '上线成功');
                })
                .catch(err => {
                    console.log(err)
                    tools.handleRes(res, false, '解压失败')
                });

        }
        else {
            tools.handleRes(res, false, '项目地址不存在')
        }
    })


});

app.listen(8899, function () {
    console.log('自动更新启动~');
})

5. Недостатки

  1. Использование файлов и папок для управления версиями более сложно (проверка существования, открытие файлов для чтения, изменение значений, сохранение).
  2. Очень плохая масштабируемость
  3. Невозможно дублировать имя файла
  4. Мультисайт несовместим, полный набор сервисов должен быть развернут на одном сайте.

6. Преимущества

  1. Избавьтесь от ограничений и проблем, связанных с git
  2. Имеет визуальный интерфейс
  3. Переключение версий удобно и просто
  4. Разработчикам не нужно настраивать локально, они отвечают только за загрузку

Версия 3 - на основе nodejs и базы данных

Визуальный интерфейс делает предыдущую версию очень удобной, но с одной стороны, из-за простого использования файлов для управления масштабируемость очень плохая, например, аутентификация, мультисайтовость, мультиплатформенность, разделение тестовых станций и т.д. , поэтому введение базы данных для хранения информации о версии.

1. Идеи

Помимо переноса данных о версии в базу данных, версия в основном решает проблему мультисайтовости, то есть фронтэнд каждого сервера может обновляться с помощью одной платформы. Здесь в основном говорят об идее

1. Основная услуга

Основная служба используется для вызова базы данных для управления версиями.

2. Дополнительный сервис

Пока вспомогательная служба развернута на других серверах, служба получает запрос от основной службы, выполняет операцию обновления и, наконец, возвращает результат, успешный он или нет.

Скрин функциональной части:

2. Очки знаний

  1. nodejs
  2. база данных

3. Яма

Нет

В-четвертых, конкретная реализация

1. База данных

Дизайн базы данных варьируется от человека к человеку, если она может контролироваться версиями. (только для справки)

  1. Таблица отделов: id, название отдела
  2. Таблица платформы: идентификатор, название платформы, идентификатор отдела
  3. Таблица проекта: идентификатор, идентификатор платформы, имя проекта, официальный адрес проекта станции, официальный адрес запроса станции, адрес проекта тестовой станции, адрес запроса тестовой станции, время изменения
  4. Таблица версий: идентификатор, имя версии, идентификатор проекта, адрес OSS, онлайн-статус, статус теста

2. Основная услуга

  1. ведомственное приобретение
  2. Платформа приобретения
  3. Добавления, удаления и изменения проекта
  4. Добавление и удаление версий, запуск и тестирование

3. Дополнительный сервис

Подсервис имеет только онлайн-функцию, и его принцип такой же, как и у онлайн-версии в версии 2. Если вы его забудете, вернитесь и посмотрите на него~

5. Недостатки

  1. В настоящее время все еще используется форма сжатого пакета, то есть после упаковки проекта сжимайте его в zip-пакет, а затем загружайте его.Если у вас есть идеи получше, добро пожаловать на обмен
  2. Также отсутствует аутентификация в системе
  3. Загрузка версии еще сложнее

6. Преимущества

Все преимущества, кроме упомянутых выше недостатков!

постскриптум

Система некоторое время работала онлайн, и это изменило способ обновления нашего внешнего интерфейса, что является одним из лучших способов сделать это в этом году. Конечно, в системе все еще есть много плохого, и я верю, что по мере того, как все больше и больше людей будут использовать ее и впитывать мнения с разных сторон, она будет усовершенствована до очень полезного инструмента~