1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lb002-laravel-tars

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Laravel Tars Driver

Описание

Tars driver для laravel.

Интеграция Laravel с микросервисной системой управления Tars.

Функции

  • Поддержка упаковки сервисов.
  • Поддержка разработки Laravel/Lumen.
  • Поддержка TarsConfig.
  • Поддержка TarsLog.
  • Поддержка регистрации в шлюзе.
  • Поддержка событий начала (laravel.tars.requesting) и окончания (laravel.tars.requested) запроса.
  • Поддержка вывода echo.
  • Поддержка протоколов http и tars.
  • Поддержка распределённой трассировки Zipkin (уже удалена, можно использовать расширение laravel-zipkin).

Ограничения

  • Ограничен дизайном фреймворка, не поддерживает сопрограммы.

Зависимости среды

  1. Laravel/Lumen 5.x.
  2. Tars-PHP.

Установка

  1. Создайте проект. Создайте структуру каталогов проекта Tars (scripts, src, tars), поместите проект Laravel/Lumen в каталог src.

  2. Установите пакет Laravel Tars.

    • Обновите Composer:
      composer require "luoxiaojun1992/laravel-tars:*"

    Или добавьте требование в composer.json:

    {
      "require": {
        "luoxiaojun1992/laravel-tars": "*"
      }
    }

    Добавьте ServiceProvider, отредактируйте src/bootstrap/app.php:

    $app->register(\Lxj\Laravel\Tars\ServiceProvider::class);

    Выполните инициализацию Laravel Tars:

    php artisan vendor:publish --tag=tars
  3. Измените файл конфигурации src/config/tars.php, замените appName, serverName и objName в поле proto.

  4. Если используется протокол http и требуется автоматическая регистрация в шлюзе (в настоящее время поддерживается только Kong), измените файл конфигурации src/config/tars.php:

    'registries' => [
         [
             'type' => 'kong',
             'url' => 'http://kong:8001/upstreams/tars_mysql8/targets', //заполните в соответствии с реальной ситуацией
         ]
    ]
  5. Настройте центр (TarsConfig) и службу журнала (TarsLog). При запуске службы конфигурация будет автоматически извлечена, если требуется запись журнала, вы можете использовать код, подобный Log::info('test log');. Если необходимо указать минимальный уровень журнала TarsLog, измените файл конфигурации src/config/tars.php:

    'log_level' => \Monolog\Logger::INFO
  6. Если используется протокол http, напишите код в соответствии со способом фреймворка:

     $router->get('/test', function () {
         \Illuminate\Support\Facades\Log::info('laravel tars test log');
         return 'Laravel Tars Test Success';
     });
  7. Если используется протокол tars, создайте файл описания интерфейса в каталоге tars и измените файл конфигурации src/config/tars.proto, добавив tarsFiles.

    В каталоге scripts выполните скрипт компиляции для генерации кода интерфейса:

    /bin/bash tars2php.sh

    В каталоге src/app/Tars/impl создайте класс реализации интерфейса и напишите бизнес-логику.

    Измените файл конфигурации src/config/tars.php в полях services, заменив имена интерфейсов и пространств имён классов реализации.

  8. Постройте среду разработки Tars-PHP. Для протокола http обратитесь к TARS-PHP-HTTP серверная и клиентская разработка.

    Для протокола tars обратитесь к TARS-PHP-TCP серверная и клиентская разработка

  9. В среде разработки Tars-PHP упакуйте проект (выполните php artisan tars:deploy в каталоге src).

  10. В бэкэнде управления Tars опубликуйте проект, обратитесь к TARS-PHP-TCP серверная и клиентская разработка, протестируйте curl 'http://{ip}:{port}/{api_route}'.

Пример использования

Для Laravel обратитесь к https://github.com/luoxiaojun1992/laravel-tars-demo.

Для Lumen обратитесь к https://github.com/luoxiaojun1992/lumen-tars-demo.

Интеграция и развёртывание

Пример конфигурации Jenkins Pipeline (настройка в соответствии с фактической ситуацией):

Laravel:

pipeline {
    agent {
        node {
            label 'phpenv'
        }
    }
    parameters {
        string(defaultValue: 'upload_from_jenkins', name: 'TAG_DESC', description: 'Описание версии выпуска')
        string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'Ветвь git, например: develop, master по умолчанию: master')
    }
    environment {
        def JENKINS_HOME = "/root/jenkins"
        def PROJECT_ROOT = "$JENKINS_HOME/workspace/laravel-tars-demo"
        def APP_NAME = "PHPTest"
        def SERVER_NAME = "LaravelTars"
    }
    stages {
        stage('Извлечение кода и компиляция'){
            steps {
                echo "Извлечение из git"
                git credentialsId:'2', url: 'https://gitee.com/lb002/laravel-tars-demo', branch: "${env.BRANCH_NAME}"
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "Установка Composer"
                        sh "composer clear-cache"
                        sh "composer install -vvv"
                        sh "cp .env.example .env"
                        sh "php artisan config:clear"
                        sh "php artisan config:cache"
                    }
                }
            } ```
{
    stage('单元测试') {
        steps {
            script {
                dir("$PROJECT_ROOT/src") {
                    echo "phpunit 测试"
                    sh "vendor/bin/phpunit tests/"
                    echo "valgrind 测试"
                }
            }
        }
    }

    stage('覆盖率测试') {
        steps {
            echo "LCOV 覆盖率测试"
        }
    }

    stage('打包与发布') {
        steps {
            script {
                dir("$PROJECT_ROOT/src") {
                    echo "打包"
                    sh "php artisan tars:deploy"
                    echo "发布"
                    sh "ls *.tar.gz > tmp.log"
                    echo "上传build包"
                    def packageDeploy = sh(script: "head -n 1 tmp.log", returnStdout: true).trim()
                    sh "curl -H 'Host:172.18.0.3:3000' -F 'suse=@./${packageDeploy}' -F 'application=${APP_NAME}' -F 'module_name=${SERVER_NAME}' -F 'comment=${env.TAG_DESC}' http://172.18.0.3:3000/pages/server/api/upload_patch_package > curl.log"
                    echo "发布build包"
                    def packageVer = sh(script: "jq '.data.id' curl.log", returnStdout: true).trim()
                    def postJson = '{"serial":true,"items":[{"server_id":"34","command":"patch_tars","parameters":{"patch_id":' + packageVer + ',"bak_flag":false,"update_text":"${env.TAG_DESC}"}}]}'
                    echo postJson
                    sh "curl -H 'Host:172.18.0.3:3000' -H 'Content-Type:application/json' -X POST --data '${postJson}' http://172.18.0.3:3000/pages/server/api/add_task"
                }
            }
        }
    }
}

Lumen:

pipeline {
    agent {
        node {
            label 'phpenv'
        }
    }
    parameters {
        string(defaultValue: 'upload_from_jenkins', name: 'TAG_DESC', description: '发布版本描述' )
        string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'git分支,如:develop,master  默认: master')
    }
    environment {
        def JENKINS_HOME = "/root/jenkins"
        def PROJECT_ROOT = "$JENKINS_HOME/workspace/lumen-tars-demo"
        def APP_NAME = "PHPTest"
        def SERVER_NAME = "LumenTars"
    }
    stages {
        stage('代码拉取与编译'){
            steps {
                echo "checkout from git"
                git credentialsId:'2', url: 'https://gitee.com/lb002/lumen-tars-demo', branch: "${env.BRANCH_NAME}"
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "Composer Install"
                        sh "composer clear-cache"
                        sh "composer install -vvv"
                        sh "cp .env.example .env"
                    }
                }
            }
        }
        stage('单元测试') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "phpunit 测试"
                        sh "vendor/bin/phpunit tests/"
                        echo "valgrind 测试"
                    }
                }
            }
        }
        stage('覆盖率测试') {
            steps {
                echo "LCOV 覆盖率测试"
            }
        }
        stage('打包与发布') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {

``` ```
echo "Упаковка"
sh "php artisan tars:deploy"
echo "Публикация"
sh "ls *.tar.gz > tmp.log"
echo "Загрузка пакета сборки"
def packageDeploy = sh(script: "head -n 1 tmp.log", returnStdout: true).trim()
sh "curl -H 'Host:172.18.0.3:3000' -F 'suse=@./${packageDeploy}' -F 'application=${APP_NAME}' -F 'module_name=${SERVER_NAME}' -F 'comment=${env.TAG_DESC}' http://172.18.0.3:3000/pages/server/api/upload_patch_package > curl.log"
echo "Публикация пакета сборки"
def packageVer = sh(script: "jq '.data.id' curl.log", returnStdout: true).trim()
def postJson = '{"serial":true,"items":[{"server_id":"33","command":"patch_tars","parameters":{"patch_id":' + packageVer + ',"bak_flag":false,"update_text":"${env.TAG_DESC}"}}]}'
echo postJson
sh "curl -H 'Host:172.18.0.3:3000' -H 'Content-Type:application/json' -X POST --data '${postJson}' http://172.18.0.3:3000/pages/server/api/add_task"
}

Jenkins процесс развёртывания Jenkins Pipeline

Интеграция PHP фреймворка с TARS

Как интегрировать TARS в PHP фреймворк

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Laravel интеграция с микросервисной управленческой структурой Tars. Расширить Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/lb002-laravel-tars.git
git@gitlife.ru:oschina-mirror/lb002-laravel-tars.git
oschina-mirror
lb002-laravel-tars
lb002-laravel-tars
master