Laravel Tars Driver
Tars driver для laravel.
Интеграция Laravel с микросервисной системой управления Tars.
Создайте проект. Создайте структуру каталогов проекта Tars (scripts, src, tars), поместите проект Laravel/Lumen в каталог src.
Установите пакет Laravel Tars.
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
Измените файл конфигурации src/config/tars.php, замените appName, serverName и objName в поле proto.
Если используется протокол http и требуется автоматическая регистрация в шлюзе (в настоящее время поддерживается только Kong), измените файл конфигурации src/config/tars.php:
'registries' => [
[
'type' => 'kong',
'url' => 'http://kong:8001/upstreams/tars_mysql8/targets', //заполните в соответствии с реальной ситуацией
]
]
Настройте центр (TarsConfig) и службу журнала (TarsLog).
При запуске службы конфигурация будет автоматически извлечена, если требуется запись журнала, вы можете использовать код, подобный Log::info('test log');
.
Если необходимо указать минимальный уровень журнала TarsLog, измените файл конфигурации src/config/tars.php:
'log_level' => \Monolog\Logger::INFO
Если используется протокол http, напишите код в соответствии со способом фреймворка:
$router->get('/test', function () {
\Illuminate\Support\Facades\Log::info('laravel tars test log');
return 'Laravel Tars Test Success';
});
Если используется протокол tars, создайте файл описания интерфейса в каталоге tars и измените файл конфигурации src/config/tars.proto, добавив tarsFiles.
В каталоге scripts выполните скрипт компиляции для генерации кода интерфейса:
/bin/bash tars2php.sh
В каталоге src/app/Tars/impl создайте класс реализации интерфейса и напишите бизнес-логику.
Измените файл конфигурации src/config/tars.php в полях services, заменив имена интерфейсов и пространств имён классов реализации.
Постройте среду разработки Tars-PHP. Для протокола http обратитесь к TARS-PHP-HTTP серверная и клиентская разработка.
Для протокола tars обратитесь к TARS-PHP-TCP серверная и клиентская разработка
В среде разработки Tars-PHP упакуйте проект (выполните php artisan tars:deploy
в каталоге src).
В бэкэнде управления 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 процесс развёртывания
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )