Драйвер Tars для Laravel.
Интеграция микросервисной архитектуры с помощью управления сервисами Tars в Laravel.
Создание проекта
Создайте структуру директорий проекта Tars (scripts, src, tars), а проект Laravel/Lumen расположите в директории src.
Установка пакета 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
Измените конфигурационный файл 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, пишите код в соответствии с требованиями Laravel.
$router->get('/test', function () {
\Illuminate\Support\Facades\Log::info('laravel tars test log');
return 'Laravel Tars Test Success';
});
Если используется протокол TARS
Напишите файл описания интерфейса TARS в директории tars, измените конфигурационный файл src/config/tars.php, добавьте 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: 'Description of the release version' )
string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'Git branch, for example: develop, master Default: 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('Checkout code and build') {
steps {
echo "checkout from git"
git credentialsId:'2', url: 'https://gitee.com/lb002/laravel-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"
sh "php artisan config:clear"
sh "php artisan config:cache"
}
}
}
}
stage('Unit testing') {
steps {
script {
dir("$PROJECT_ROOT/src") {
echo "PHPUnit Testing"
sh "vendor/bin/phpunit tests/"
echo "Valgrind Testing"
}
}
}
}
stage('Coverage testing') {
steps {
echo "LCOV Coverage Testing"
}
}
stage('Packaging and Release') {
steps {
script {
dir("$PROJECT_ROOT/src") {
echo "Packaging"
sh "php artisan tars:deploy"
echo "Release"
sh "ls *.tar.gz > tmp.log"
echo "Upload build package"
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 "Release build package"
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"
}
}
}
}
}
post {
success {
emailext (
subject: "[jenkins]Build message: ${env.JOB_NAME} Branch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} successfully completed!",
body: '${SCRIPT, template="groovy-html.template"}',
mimeType: 'text/html',
to: "luoxiaojun1992@sina.cn",
)
cleanWs()
}
failure {
emailext (
subject: "[jenkins]Build message: ${env.JOB_NAME} Branch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} failed!",
body: '${SCRIPT, template="groovy-html.template"}',
mimeType: 'text/html',
to: "luoxiaojun1992@sina.cn",
)
cleanWs()
}
}
}
```Lumen:
pipeline { agent { node { label 'phpenv' } } parameters { string(defaultValue: 'upload_from_jenkins', name: 'TAG_DESC', description: 'Description of the release version' ) string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'Git branch, for example: develop, master Default: 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('Checkout and compile code') { 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 "Install Composer" sh "composer clear-cache" sh "composer install -vvv" sh "cp .env.example .env" } } } } stage('Unit testing') { steps { script { dir("$PROJECT_ROOT/src") { echo "PHPUnit Testing" sh "vendor/bin/phpunit tests/" echo "Valgrind Testing" } } } } stage('Coverage testing') { steps { echo "LCOV Coverage Testing" } } stage('Building and Release') { steps { script { dir("$PROJECT_ROOT/src") { echo "Building" sh "php artisan tars:deploy" echo "Release" sh "ls *.tar.gz > tmp.log" echo "Upload 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 "Release build" 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" } } } } } post { success { emailext ( subject: "[jenkins]Build notification: ${env.JOB_NAME} Branch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} Successfully!", body: '${SCRIPT, template="groovy-html.template"}', mimeType: 'text/html', to: "luoxiaojun1992@sina.cn", ) cleanWs() } failure { emailext ( subject: "[jenkins]Build notification: ${env.JOB_NAME} Branch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} Failed!", body: '${SCRIPT, template="groovy-html.template"}', mimeType: 'text/html', to: "luoxiaojun1992@sina.cn", ) cleanWs() } } }
Deployment process in Jenkins

### Integration of Tars into PHP Framework
[Integrating TARS into a PHP framework](./docs/integration.md)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )