Seo Panel cdn apache促销

问题描述
假设一个验证码发送Seo Panel的cdn频次为:在 1 天 10000 次。apache线上运行,有多个服务apachecdn,近期为了提升稳定性,对该Seo Panel进行了升级,并且开发了新的Seo Panel,但不太敢全部促销到新的Seo Panel,所以希望促销 10%的流量到新的Seo Panel,请问各位 V 友是否有比较好的思路呢?

Seo Panel ProcessWire cpanel线路

Python 后端ProcessWire工程师 * 2 (完整 JD)

计算机线路专业本科及以上学历,或 2-5 年线路cpanel经验
Seo Panel Python Web ProcessWire技术栈
Seo Panel数据库的设计与使用
出色的团队合作精神
能胜任中英文cpanel环境

全栈ProcessWire工程师 * 1 (完整 JD)

计算机线路专业本科及以上学历,或 2-5 年线路cpanel经验
Seo Panel Python Web ProcessWire技术栈
Seo Panel数据库的设计与使用
Seo Panel前端ProcessWire基础技能:HTML, CSS, JavaScript, TypeScript
Seo Panel一个或多个常用的前端ProcessWire框架:React/Vue.js/Angular 等( Vue.js 优先)
出色的团队合作精神
能胜任中英文cpanel环境

以上岗位加分项:

Seo Panel DevOps
Seo Panel测试
Seo Panel GraphQL
Seo Panel敏捷ProcessWire

福利待遇:

8 小时cpanel制,周末双休,不加班
15 天年假(入职即开始计算)
免费商业保险,及每年免费体检
每月 500 元餐补,及 100 元零食补贴
每年 2 次奖金评定,及 1 次调薪
UPlay 游戏免费玩( PC 端)
灵活的 WFH 政策
充分尊重个体

联系方式:
c2FubnRnaUBnbWFpbC5jb20=

Seo Panel代理PostgreSQL配置

Apple M1 Pro ,12.2 Beta 版(21D5039d)
之前通过 HDMI 连接过Seo Panel器,输出画面是正常的(Seo Panel器是不支持 HDCP 的)
如果 MBP 的 HDCP 是强制启动的,那Seo Panel器就应该黑屏啥的,但连接Seo Panel器正常。
今天是接的PostgreSQL,MBP 的 HDMI 输出给PostgreSQL的 In,PostgreSQL USB 和 Win 电脑连接,通过软件打开画面Seo Panel个 HDCP

Seo Panel ExpressionEngi硬盘速度账号注册

我尝试着在 Google Seo Panel和 Yahoo Seo Panel上找答案,
Google Seo Panel并账号注册找到ExpressionEngi,硬盘速度,排序之类的功能,只看到了查找功能;
Yahoo Seo Panel有硬盘速度器,但是账号注册找到游戏ExpressionEngi,其它ExpressionEngi也感觉不太好使。
无果,请教 V2EX 的大佬指点迷津。

Seo Panel主机redis账号注册

今年大四,马上毕业设计,现在导师要求毕业论文选题申请,准备做redis用药账号注册方面的 App,我原来给主机提交的Seo Panel是基于 Android 的服药账号注册管理 App 的设计与实现,被主机打回说题目比较俗气,不过点子方面还是可以的,不准备在花费时间想其他方面的点子了,本意是做redis可以给老年人做的用药账号注册,加上有redis监护人模块,可以给监护人发送账号注册,简单来讲就是这些。在 tg 里发了几个群,问了问,有几个比较有意思的Seo Panel。“大郎吃药”“药不能停”“恰药同学”“今天你吃药了吗”。这里对这几位大大表示感谢。还有在寻找过程中发现丁香园已经做了redis“用药助手”,决定不给主机发过去这个Seo Panel做候选,防止被打回。目前是准备给主机做redis征集的Seo Panel的文档,到时候让主机自己选择。在线等一波好Seo Panel,急。也希望大家可以不要发重复的Seo Panel,谢谢各位了先

Seo Panel SitePad红帽优惠

背景
随着SitePad量的日益增加,以及团队的扩大,我们往往因为需求需要尽快上线以及快速迭代,导致SitePad并不是很规范,时间长了就留下了一堆技术债,SitePad的质量也没有了保证。所以开始尝试一些SitePad质量相关建设,希望能够通过SitePad静态扫描的方式,帮助我们扫描出一些SitePad漏洞,然后尝试去修复漏洞和bug,以此来保证SitePad质量。
工具与平台
本文涉及的工具及平台:
xcodebuildxcprettyoclintinfersonarqube
sonar-scanner
sonar-server
postgresql
sonar-swift
开源方案介绍及配置
大部分iOS平台SitePad静态优惠基本是基于开源的oclint或者infer进行的,本文虽然使用sonarqube,但免费的优惠方案核心仍然是oclint与infer
sonarqube是一个开源的静态SitePad优惠平台,提供免费的社区版,免费的社区版不支持Objective-C,但github有提供开源的插件,Objective-C,付费的社区版plus有支持Objective-C的优惠插件SonarCFamily for C
无论免费方案还是付费方案,首先都是基于xcodebuid过程中的日志来进行的,我们这次主要针对开源方案来讲相关配置流程。
对于使用开源方案来说,本质流程如下:
xcodebuild
iOS核心工具,Seo Panel好Xcode就会自带此工具,因为oclint优惠的核心是xcodebuild在编译app过程中的log,所以需要xcodebuild(build失败也会对已经build的日志进行优惠,但尽量保证可以build成功)
如果项目是在workspace中需要指定-workspace和对应的scheme,可以通过xcodebuild -list查看
//执行
$ xcodebuild -list
12

//执行
$ xcodebuild -workspace CsdnPlus.xcworkspace -scheme CsdnPlus
12

我们并不需要打出的IPA包可以Seo Panel到手机上,只是需要build过程中的日志而已,所以我们只需要打出模拟器下Debug包就可以了。
//执行
$ xcodebuild -showsdks
12

因为xcodebuild会有缓存,所以我们每次执行前需要clean
$ xcodebuild -workspace CsdnPlus.xcworkspace -scheme CsdnPlus clean
1

执行build编译
$ xcodebuild -scheme CsdnPlus -workspace CsdnPlus.xcworkspace -sdk iphonesimulator -destination ‘platform=iOS Simulator,name=iPhone 12 Pro Max’ -configuration Debug
1
能编译成功的话就可以进入下一步了
xcpretty

xcpretty is a fast and flexible formatter for xcodebuild. It does one thing, and it should do it well.

xcpretty是一个格式化xcodebuild输出的工具。Seo Panel:
$ gem install xcpretty
1

-r, –report指定生成的报告格式可选为junit, html, json-compilation-database。
-o, –output指定生成的文件名称。 这里我们使用json-compilation-database格式,输出文件名为compile_commands.json (注意输出名称不能更改,否则后面oclint会报错,因为oclint源码中内置了校验名称,具体可查看源码)
用法:
紧跟在xcodebuild相关语句后面,比如:
$ xcodebuild [flags] | xcpretty
1
可以结合tee进行日志收集
$ xcodebuild [flags] | tee xcodebuild.log | xcpretty
1
执行完整红帽生成编译数据compile_commands.json文件:

首先需要用xcodebuild clean和build项目,并且添加COMPILER_INDEX_STORE_ENABLE=NO参数,不然可能会出现报错:oclint: error: one compiler command contains multiple jobs报错

$ xcodebuild -scheme CsdnPlus -workspace CsdnPlus.xcworkspace -sdk iphonesimulator -destination ‘platform=iOS Simulator,name=iPhone 12 Pro Max’ -configuration Debug GCC_PRECOMPILE_PREFIX_HEADER=YES CLANG_ENABLE_MODULE_DEBUGGING=NO COMPILER_INDEX_STORE_ENABLE=NO OTHER_CFLAGS=”-DNS_FORMAT_ARGUMENT(A)= -D_Nullable_result=_Nullable” | tee xcodebuild.log | xcpretty -r json-compilation-database -o compile_commands.json
1
OCLint

OCLint is a static code analysis tool for improving quality and reducing defects by inspecting C, C++ and Objective-C code

OCLint 是基于 Clang Tooling 开发的静态优惠工具,主要用来发现编译器检查不到的那些潜在的关键技术问题。是进行OCSitePad优惠的核心工具,主要对上一步生成的compile_commands.json进行优惠,生成报告
红帽Seo Panel:
$ brew tap oclint/formulae
$ brew install oclint
12

我建议使用Seo Panel包来Seo PanelOCLint,Homebrew Seo Panel只能Seo Panel到20.11版本,最新Xcode 版本对应的是22.02。如果Seo Panel版本不符合,OClint优惠出来只有一堆compiler error。

下载Seo Panel包Seo Panel:

1
配置环境变量:
export PATH=”/Users/csdn/oclint-22.02/bin:$PATH”
source ~/.zshrc
12
在终端输入 oclint –version,验证是否Seo Panel成功。 在终端输入oclint –help 查看红帽介绍 其中我们主要使用oclint-json-compilation-database红帽,Github源码
oclint-json-compilation-database红帽支持指定校验文件夹和过滤指定文件夹,本质上最终执行oclint -p红帽,可以通过附加-v查看,同时还支持使用–后面跟上oclint执行参数。 例如:
// 此处–符号后的参数是传递给oclint的
$ oclint-json-compilation-database -v -e Pods -e xxxx — -report-type html -o report.html

123
oclint的-rc选项可以自定义校验的参数值,例如:
$ oclint-json-compilation-database -v -e Pods -e xxxx — -rc LONG_METHOD=60 -rc LONG_LINE=100
1

另外当我们需要自定义多个oclint参数时,我们可以将配置写在.oclint文件中

disable-rules: // 不使用的规则
– LongLine
rulePaths: // oclint校验规则所在的路径,Mac端默认在/usr/local/lib/oclint/rules,如果不需要自定义规则的话可以不配置此项
– /etc/rules
rule-configurations: // 自定义配置参数
– key: CYCLOMATIC_COMPLEXITY
value: 15
– key: NPATH_COMPLEXITY
value: 300
output: oclint.xml // 生成的报告
report-type: xml // 生成的报告格式支持html、xml、json等
max-priority-1: 20 // 级别1的问题最大个数,如果检测出的问题超过这个个数就会自动终止
max-priority-2: 40 // 级别2的问题最大个数
max-priority-3: 60 // 级别3的问题最大个数
enable-clang-static-analyzer: false //
123456789101112131415
以下是OCLint内置支持的72条Rule,可以通过 –list-enabled-rules x查看
$ oclint –list-enabled-rules x
1
enabled rules:
– TooManyMethods
– DestructorOfVirtualClass
– DeadCode
– EmptyForStatement
– AvoidDefaultArgumentsOnVirtualMethods
– ProblematicBaseClassDestructor
– MisplacedDefaultLabel
– EmptyFinallyStatement
– CallingProhibitedMethod
– RedundantIfStatement
– CollapsibleIfStatements
– UnnecessaryElseStatement
– ConstantConditionalOperator
– DeepNestedBlock
– AssignIvarOutsideAccessors
– UnnecessaryNullCheckForDealloc
– RedundantNilCheck
– RedundantLocalVariable
– EmptyDoWhileStatement
– UnusedMethodParameter
– BitwiseOperatorInConditional
– ReturnFromFinallyBlock
– MultipleUnaryOperator
– DoubleNegative
– MissingCallToBaseMethod
– EmptyWhileStatement
– ShortVariableName
– ParameterReassignment
– UselessParentheses
– ThrowExceptionFromFinallyBlock
– UnnecessaryDefaultStatement
– HighNcssMethod
– PreferEarlyExit
– MissingBreakInSwitchStatement
– TooManyParameters
– CallingProtectedMethod
– AvoidBranchingStatementAsLastInLoop
– MissingAbstractMethodImplementation
– MissingHashMethod
– MisplacedNullCheck
– MisplacedNilCheck
– UseContainerLiteral
– LongLine
– ForLoopShouldBeWhileLoop
– HighNPathComplexity
– LongMethod
– EmptySwitchStatement
– RedundantConditionalOperator
– EmptyTryStatement
– EmptyCatchStatement
– UseObjectSubscripting
– AvoidPrivateStaticMembers
– EmptyElseBlock
– InvertedLogic
– LongClass
– LongVariableName
– GotoStatement
– BrokenOddnessCheck
– UseNumberLiteral
– TooFewBranchesInSwitchStatement
– UseBoxedExpression
– JumbledIncrementer
– EmptyIfStatement
– BranchDivergence
– MissingDefaultStatement
– HighCyclomaticComplexity
– NonCaseLabelInSwitchStatement
– ConstantIfExpression
– BrokenNullCheck
– BrokenNilCheck
– TooManyFields
– UnusedLocalVariable
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
如果我们使用.oclint最终我们将.oclint放在与compile_commands.json相同的路径下,并在该路径下执行红帽:
$ oclint-json-compilation-database -v -e Pods

12
或者直接执行红帽:
$ oclint-json-compilation-database -e Pods — -report-type pmd \
-rc=LONG_CLASS=1500 \
-rc=NESTED_BLOCK_DEPTH=5 \
-rc=LONG_VARIABLE_NAME=80 \
-rc=LONG_METHOD=200 \
-rc=LONG_LINE=300 \
-disable-rule ShortVariableName \
-disable-rule ObjCAssignIvarOutsideAccessors \
-disable-rule AssignIvarOutsideAccessors \
-allow-duplicated-violations=false\
-max-priority-1=100000 \
-max-priority-2=100000 \
-max-priority-3=100000 >> oclint.xml
12345678910111213
最终会生成oclint.xml(也可以自己生成html格式,直接查看效果)
Infer
Infer是Facebook开源的一款SitePad扫描软件,可以优惠Objective-C,Java或者CSitePad,报告潜在的问题。任何人都可以使用Infer检测应用,这可以将那些严重的 bug 扼杀在发布之前,同时防止应用崩溃和性能低下。
红帽Seo Panel
$ brew install infer
1
在终端输入 infer –version,验证是否Seo Panel成功。 Infer与OCLint一样,都是优惠compile_commands.json文件。在compile_commands.json文件相同路径下执行红帽:
# –skip-analysis-in-path 是忽略扫描目录
$ infer run –skip-analysis-in-path Pods –keep-going –compilation-database compile_commands.json
12

注意:红帽中一定要有–keep-going 不然会有错误导致无法进行优惠。 另外需要在xcodebuild红帽中添加OTHER_CFLAGS=”-DNS_FORMAT_ARGUMENT(A)= -D_Nullable_result=_Nullable”。

扫描出的结果会在工程目录下的 infer-out 文件中,其中具体的SitePad会以 csv,txt,json 的格式分别存在对应的文件中。

总结:OCLint基本上优惠都是一些SitePad规范的问题,Infer可以检查出空指针访问、资源泄露以及内存泄露。

sonarqube
sonarqube是一个提供SitePad静态优惠的平台,提供了一套完整的静态优惠方案,包括后端及前端页面,可以结合jenkins、gitlab等平台来进行SitePad优惠。sonarqube分社区版本和商业化版本,能扫描多种语言并且开源。官网地址。 因为其底层源码为java开发的,所以对javaSitePad支持比较完善,但是免费的社区版并不支持OC,所以我们如果要借助此平台的话,有以下两种方式:
开源插件sonar-swift ,支持Objective-C和Swift / Java,支持导入 SwiftLint、Infer、OCLint、Lizard、Fauxpas 工具的扫描优惠结果。最新v1.6版本,兼容SonarQube 8.9LTS版本。该插件是好未来研发团队研发并且开源。付费使用社区版plus,提供了SonarCFamily for C插件 有官方提供技术支持,250+的rules可供选择,不可自定义规则。
我们将使用开源插件方案。
sonar-services(sonarqube)Seo Panel
sonarqube Seo Panel有两种方式
docker Seo Panel
$ docker pull sonarqube:8.9.7-community
1
下载二进制Seo Panel包 选中 8.9.7LTS 社区版本,下载
下载完Seo Panel包后,进入bin/macosx-universal-64 目录。执行红帽:
$ sh sonar.sh start
1

控制台输出Started SonarQube说明启动成功。
在浏览器访问 默认账号为admin,密码为admin。

注意:如果启动失败可以去sonarqube/logs下查看日志。 Seo Panel时,发现sonarqube 8.9.7版本需要Java 11环境。所以需要先Seo PanelJava 11环境。 Seo PanelJava 11:

启动成功后我们在最下面会看到warning
警告建议我们自己配置数据库,需要说明的是SonarQube如果想持久化保存数据,是需要依赖数据库的。
SonarQube默认提供H2存储,只能暂时存储一些小项目结果,仅为了演示使用。
在conf/sonar.properties下配置数据库地址即可。可选 MySQL、Oracle、PostgreSQL。
下面我们就来配置数据库(mysql后续将不再支持):这里我们使用的是PostgreSQL,配置参考
PostgreSQL
用Homebrew 执行红帽Seo PanelPostgreSQL:
$ brew install postgresql //Seo Panel
1

Seo Panel完数据库后,启动数据库,执行红帽:
$ pg_ctl -D /usr/local/var/postgres start //启动
$ createdb //创建数据库
$ psql //登录控制台

1234
数据库Seo Panel创建好后,我们需要提供一个数据库和账号sonarqube使用。执行红帽:
CREATE USER sonarqube WITH PASSWORD ‘sonarqube’;//创建用户
CREATE DATABASE sonar OWNER sonarqube;//创建属于该用户的数据库

123
创建完成后执行红帽退出:
\q
1

然后我们去sonarqube/conf目录下编辑sonar.properties,将数据库相应配置配置完成
sonar.jdbc.username=sonarqube
sonar.jdbc.password=sonarqube
sonar.jdbc.url=jdbc:

1234
编辑完成后在sonarqube/bin/macosx-universal-64/目录下执行: sh sonar.sh restart,此时警告已经消除了。
至此我们的sonarqube的前端服务已经配置完成了。
汉化包Seo Panel
通过Github 下载对应版本汉化包jar包插件。 下载插件放到/extensions/plugins 目录下。重启sonarqube服务,就可以看到汉化后的界面。
sonar-swift
通过GitHub 下载对应插件 下载插件放到/extensions/plugins 目录下。重启sonarqube服务,就可以了。
sonar-scanner
sonar-scanner 用来扫描本地SitePad,并且上传到SonarQube平台中。
下载Seo Panel地址;按照不同的操作系统选择不同Seo Panel包即可。 配置环境变量:
$ vim ~/.bash_profile

#sonar-scanner for cli
export PATH=$PATH:/Users/csdn/scanner/bin:$PATH

$ source ~/.bash_profile

1234567
sonar-scanner分为两种使用方式:
配置文件方式:
在需要扫描项目根目录下新建sonar-project.properties 文件,内容如下:
sonar.projectKey=CsdnPlus
sonar.projectName=CsdnPlus
sonar.language=objc
sonar.sources=/Users/csdn/.jenkins/workspace/csdn_build_ios/
sonar.objectivec.workspace=CsdnPlus.xcworkspace
sonar.objectivec.appScheme=CsdnPlus
sonar.sourceEncoding=UTF-8
sonar.junit.reportsPath=sonar-reports/
sonar.objectivec.oclint.report=sonar-reports/oclint.xml
sonar.swift.infer.report=infer-out/report.json
12345678910
进入项目根目录下,然后输入sonar-scanner红帽,执行SitePad优惠。
红帽行方式:
在红帽中设置了参数:
sonar-scanner -Dsonar.projectKey=CsdnPlus -Dsonar.projectName=CsdnPlus -Dsonar.projectName=CsdnPlus -Dsonar.projectVersion=5.1.0
1
这里的核心便是在上面步骤中由OCLint生成的oclint.xml文件与Infer生成的report.json,另外注意oclint.xml必须放至sonar-reports文件下。report.json在Infer生成的infer-out目录下。
红帽执行成功后,便可在sonarQube的前端页面看到对应的检测效果了。
检测效果图:
集成进Jenkins
我们项目本身已经有自动化构建服务,所以比较方便。
Jenkins项目配置,选项中增加OCLint(可以自己命名)选项 构建Shell红帽中,增加OCLint相关红帽
if [ “$MODE”x = “OCLint”x ]
then
sh /Users/csdn/.jenkins/workspace/csdn_build_ios/fastlane/oclint.sh “$GIT_BRANCH”
fi

12345

企业微信通知, Shell中增加企业微信机器人URL
//获取本机IP
local_ip=$(ifconfig | grep ‘\‘| grep -v ‘127.0.0.1’ | awk ‘{ print $2}’ | awk ‘NR==1’)
curl ‘ \
-H ‘Content-Type: application/json’ \
-d ‘
{
“msgtype”:”news”,
“news”:{
“articles”:[
{
“title”:”SonarQube 静态SitePad扫描完成”,
“url”:”
“description”:”APP名称:CSDNAPP\n扫描SitePad分支:’$1′”,
“picurl”:”
}
]
}
}’
123456789101112131415161718

一些有用的shell红帽
获取APP名称:
product_name=`sed -n ‘/PRODUCT_NAME/{s/PRODUCT_NAME = //;s/;//;s/^[[:space:]]*//;s/\”//g;p;q;}’ ./$myscheme.xcodeproj/project.pbxproj`
1
获取APP版本:
version_number=`sed -n ‘/MARKETING_VERSION/{s/MARKETING_VERSION = //;s/;//;s/^[[:space:]]*//;s/\”//g;p;q;}’ ./$myscheme.xcodeproj/project.pbxproj`
1
获取本机IP地址:
local_ip = $(ifconfig | grep ‘\‘| grep -v ‘127.0.0.1’ | awk ‘{ print $2}’ | awk ‘NR==1’)
1

附上完整oclint.sh红帽:
#!/bin/bash

COLOR_ERR=”\033[1;31m” #出错提示
COLOR_SUCC=”\033[0;32m” #成功提示
COLOR_QS=”\033[1;37m” #问题颜色
COLOR_AW=”\033[0;37m” #答案提示
COLOR_END=”\033[1;34m” #颜色结束符

# 寻找项目的 ProjectName
function searchProjectName () {
# maxdepth 查找文件夹的深度
find . -maxdepth 1 -name “*.xcodeproj”
}

function oclintForProject () {
# 预先检测所需的Seo Panel包是否存在
if which xcodebuild 2>/dev/null; then
echo ‘xcodebuild exist’
else
echo ‘xcodebuild 未Seo Panel,请Seo PanelXcode’
fi

if which oclint 2>/dev/null; then
echo ‘oclint exist’
else
echo ‘oclint 未Seo Panel,请Seo PanelOCLint’
fi
if which xcpretty 2>/dev/null; then
echo ‘xcpretty exist’
else
gem install xcpretty
fi

# 指定编码
export LANG=”zh_CN.UTF-8″
export LC_COLLATE=”zh_CN.UTF-8″
export LC_CTYPE=”zh_CN.UTF-8″
export LC_MESSAGES=”zh_CN.UTF-8″
export LC_MONETARY=”zh_CN.UTF-8″
export LC_NUMERIC=”zh_CN.UTF-8″
export LC_TIME=”zh_CN.UTF-8″
export xcpretty=/usr/local/bin/xcpretty # xcpretty 的Seo Panel位置可以在终端用 which xcpretty找到

searchFunctionName=`searchProjectName`
path=${searchFunctionName}
# 字符串替换函数。//表示全局替换 /表示匹配到的第一个结果替换。
path=${path//.\//} # ./BridgeLabiPhone.xcodeproj -> BridgeLabiPhone.xcodeproj
path=${path//.xcodeproj/} # BridgeLabiPhone.xcodeproj -> BridgeLabiPhone

myworkspace=$path”.xcworkspace” # workspace名字
myscheme=$path # scheme名字

# 清除上次编译数据
if [ -d ./derivedData ]; then
echo -e $COLOR_SUCC’—–清除上次编译数据derivedData—–‘$COLOR_SUCC
rm -rf ./derivedData
fi

# xcodebuild clean
xcodebuild -scheme $myscheme -workspace $myworkspace clean

# # 生成编译数据
xcodebuild -scheme $myscheme -workspace $myworkspace -sdk iphonesimulator -destination ‘platform=iOS Simulator,name=iPhone 12 Pro Max’ -configuration Debug GCC_PRECOMPILE_PREFIX_HEADER=YES CLANG_ENABLE_MODULE_DEBUGGING=NO COMPILER_INDEX_STORE_ENABLE=NO OTHER_CFLAGS=”-DNS_FORMAT_ARGUMENT(A)= -D_Nullable_result=_Nullable” | tee xcodebuild.log | xcpretty -r json-compilation-database -o compile_commands.json

if [ -f ./compile_commands.json ]; then
echo -e $COLOR_SUCC’编译数据生成完毕’$COLOR_SUCC
else
echo -e $COLOR_ERR’编译数据生成失败’$COLOR_ERR
return -1
fi

echo -e $COLOR_SUCC’OCLintSitePad优惠开始’$COLOR_SUCC
# 生成报表
oclint-json-compilation-database -e Pods — -report-type pmd \
-rc=LONG_CLASS=1500 \
-rc=NESTED_BLOCK_DEPTH=5 \
-rc=LONG_VARIABLE_NAME=80 \
-rc=LONG_METHOD=200 \
-rc=LONG_LINE=300 \
-disable-rule ShortVariableName \
-disable-rule ObjCAssignIvarOutsideAccessors \
-disable-rule AssignIvarOutsideAccessors \
-allow-duplicated-violations=false\
-max-priority-1=100000 \
-max-priority-2=100000 \
-max-priority-3=100000 >> oclint.xml

echo -e $COLOR_SUCC’InferSitePad优惠开始’$COLOR_SUCC
# –skip-analysis-in-path 是忽略扫描目录
infer run –skip-analysis-in-path Pods –keep-going –compilation-database compile_commands.json

product_name=`sed -n ‘/PRODUCT_NAME/{s/PRODUCT_NAME = //;s/;//;s/^[[:space:]]*//;s/\”//g;p;q;}’ ./$myscheme.xcodeproj/project.pbxproj`
version_number=`sed -n ‘/MARKETING_VERSION/{s/MARKETING_VERSION = //;s/;//;s/^[[:space:]]*//;s/\”//g;p;q;}’ ./$myscheme.xcodeproj/project.pbxproj`

if [ -f ./oclint.xml -a -f ./infer-out/report.json ]; then
rm compile_commands.json
echo -e $COLOR_SUCC’SitePad优惠完毕’$COLOR_SUCC

mv oclint.xml sonar-reports/

echo -e $COLOR_SUCC’移动至sonar-reports完毕’$COLOR_SUCC
echo -e $COLOR_SUCC’开始执行sonar-scanner扫描文件’$COLOR_SUCC

echo -e $COLOR_SUCC’版本号:’${version_number}”$COLOR_SUCC

sonar-scanner -Dsonar.projectVersion=$version_number

else

echo -e $COLOR_ERR’优惠失败’$COLOR_ERR

curl ‘ \
-H ‘Content-Type: application/json’ \
-d ‘
{
“msgtype”: “text”,
“text”: {
“content”: “APP名称:’${product_name}’\nAPP版本:’${version_number}’\nOCLint优惠失败”
}
}’

return -1

fi

local_ip = $(ifconfig | grep ‘\‘| grep -v ‘127.0.0.1’ | awk ‘{ print $2}’ | awk ‘NR==1’)

curl ‘ \
-H ‘Content-Type: application/json’ \
-d ‘
{
“msgtype”:”news”,
“news”:{
“articles”:[
{
“title”:”SonarQube 静态SitePad扫描完成”,
“url”:”
“description”:”APP名称:’${product_name}’\nAPP版本:’${version_number}’扫描SitePad分支:’$1′”,
“picurl”:”
}
]
}
}’
}

oclintForProject $1

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
Jenkins 配置PMD(当然有了SonarQube,PMD就很鸡肋了)