Laravel in Tars with ci
Create project
Create the tars project directory structure (scripts、src、tars),put Laravel/Lumen project in src directory.
Install Laravel Tars
Update Composer
composer require "luoxiaojun1992/laravel-tars:*"
or add requirement to composer.json
{
"require": {
"luoxiaojun1992/laravel-tars": "*"
}
}
add ServiceProvider,edit src/bootstrap/app.php
$app->register(\Lxj\Laravel\Tars\ServiceProvider::class);
Initialization Laravel Tars
php artisan vendor:publish --tag=tars
edit proto
in src/config/tars.php ,change appName、serverName、objName
If you use the HTTP protocol, you need to automatically register to the gateway (now only support Kong),edit src/config/tars.php
'registries' => [
[
'type' => 'kong',
'url' => 'http://kong:8001/upstreams/tars_mysql8/targets', //Fill in according to the actual situation
]
]
TarsConfig & TarsLog
The configuration will be pulled automatically when the service starts,If you need to log,can use Log::info('test log');
If you need to specify the minimum log level for Tarslog logging,edit src/config/tars.php
'log_level' => \Monolog\Logger::INFO
If you use the HTTP protocol, code in a framework native way
$router->get('/test', function () {
\Illuminate\Support\Facades\Log::info('laravel tars test log');
return 'Laravel Tars Test Success';
});
If you use the tasrsprotocol
Write the tars interface description file in the tars directory,edit proto in src/config/tars,add tarsFiles
Executing compilation script in scripts directory to generate interface code
/bin/bash tars2php.sh
Create interface implementation class in src/app/Tars/impl directory and write business logic code
Edit services in src/config/tars.php,replace interface and interface implementation namespace
Setting up the development environment of TarsPHP
If using the HTTP protocol, refer toTARS-PHP-HTTP Server and client development
If using the tars protocol, refer toTARS-PHP-TCP Server and client development
Package the project in the tars PHP development environment(run php artisan tars:deploy
in src)
Publish the project in the tars management background, please refer to TARS-PHP-TCP Server and client development),测试curl 'http://{ip}:{port}/{api_route}'
Jenkins Pipeline Configuration example (modified according to actual situation)
Laravel:
pipeline {
agent {
node {
label 'phpenv'
}
}
parameters {
string(defaultValue: 'upload_from_jenkins', name: 'TAG_DESC', description: 'description' )
string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'git brunch,such as: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('codePull'){
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('unitTest') {
steps {
script {
dir("$PROJECT_ROOT/src") {
echo "phpunit test"
sh "vendor/bin/phpunit tests/"
echo "valgrind test"
}
}
}
}
stage('coverageTest') {
steps {
echo "LCOV coverageTest"
}
}
stage('Compiling and publishing') {
steps {
script {
dir("$PROJECT_ROOT/src") {
echo "deploy"
sh "php artisan tars:deploy"
echo "publishing"
sh "ls *.tar.gz > tmp.log"
echo "upload build tgz"
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 "package build tagz"
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]Construction notice:${env.JOB_NAME} brunch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} success !",
body: '${SCRIPT, template="groovy-html.template"}',
mimeType: 'text/html',
to: "luoxiaojun1992@sina.cn",
)
cleanWs()
}
failure {
emailext (
subject: "[jenkins]Construction notice:${env.JOB_NAME} brunch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} fail !",
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' )
string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'gitbrunch,such as: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('codePull'){
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('unitTest') {
steps {
script {
dir("$PROJECT_ROOT/src") {
echo "phpunit test"
sh "vendor/bin/phpunit tests/"
echo "valgrind test"
}
}
}
}
stage('coverageTest') {
steps {
echo "LCOV coverageTest"
}
}
stage('Compiling and publishing') {
steps {
script {
dir("$PROJECT_ROOT/src") {
echo "deploy"
sh "php artisan tars:deploy"
echo "publishing"
sh "ls *.tar.gz > tmp.log"
echo "upload build tgz"
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 "package build tagz"
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]Construction notice:${env.JOB_NAME} brunch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} success !",
body: '${SCRIPT, template="groovy-html.template"}',
mimeType: 'text/html',
to: "luoxiaojun1992@sina.cn",
)
cleanWs()
}
failure {
emailext (
subject: "[jenkins]Construction notice:${env.JOB_NAME} brunch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} fail !",
body: '${SCRIPT, template="groovy-html.template"}',
mimeType: 'text/html',
to: "luoxiaojun1992@sina.cn",
)
cleanWs()
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。