Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓÃJenkins+OCLint+SonarCube¶ÔiOSÏîÄ¿½øÐдúÂë·ÖÎö
 
  5766  次浏览      28
2018-8-10  
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚÍøÂç,Ö÷Òª½éÉÜÁËʹÓÃJenkinsÀ´½øÐгÖÐø¹¹½¨£¬Ö´ÐÐOCLintÀ´½øÐдúÂë·ÖÎö£¬È»ºó½«OCLintÉú³ÉµÄ·ÖÎö±¨¸æ´«¸øSonarCubeÀ´¶ÔÏîÄ¿´úÂë½øÐгÖÐøµÄ·ÖÎö¡£

´óÖµÄÁ÷³ÌÊÇʹÓÃJenkinsÀ´½øÐгÖÐø¹¹½¨£¬Ö´ÐÐOCLintÀ´½øÐдúÂë·ÖÎö£¬È»ºó½«OCLintÉú³ÉµÄ·ÖÎö±¨¸æ´«¸øSonarCubeÀ´¶ÔÏîÄ¿´úÂë½øÐгÖÐøµÄ·ÖÎö¡£¶ÔÓÚÏîÄ¿¹¹½¨¿ÉÒÔ²ÉÈ¡GitÌá½»´¥·¢»òÕßÊǶ¨Ê±ÈÎÎñµÄ·½Ê½¡£ÕâÀïÃæµÄÖ÷ÒªÎÊÌâÊÇ£º

ÕâÊǸö·ÖÉ¢µÄϵͳ£¬¸÷¸ö»·½ÚÏ໥ÒÀÀµ£¬Ã¿¸ö»·½Ú¶¼¿ÉÄܳö´í£»

JenkinsµÄ¹¹½¨»·¾³±È½ÏÌØÊ⣬ÓëÎÒÃÇÖ±½ÓÓÃÃüÁîÐвÙ×÷ÊÇÓвîÒìµÄ£»

SonarCubeÖ§³ÖObjective-cµÄ²å¼þÊÇÊշѵģ¬¿ªÔ´²å¼þ¶Ô×îÐÂOCLintµÄÖ§³Ö²»Ì«¹»£»

×¢ÒâÈí¼þ°æ±¾¡¢×ÊÁϵÄʱЧÐÔ£¨Xcode°æ±¾ÐèÒªÌØ±ð×¢Ò⣩£»

ÔÚÎÒÃǴµÄ¹ý³ÌÖÐÓöµ½µÄÎÊÌâ»ù±¾ÉÏÊôÓÚÉÏÃæÈý¸ö·½Ã棬Èç¹ûÓöµ½Á˱¾ÎÄÖÐδ³öÏÖµÄÎÊÌ⣬³¢ÊÔ´ÓÉÏÃæ¼¸¸ö·½ÃæÈëÊÖ·ÖÎö¡£ÎªÁ˸üºÃµÄÀí½âÕû¸öÁ÷³Ì£¬×îºó»á²ÉÓÃÒ»¸ö¿ªÔ´ÏîÄ¿½øÐдúÂë·ÖÎö¡£

ÔĶÁ˵Ã÷£º±¾ÆªÄÚÈݲ½Öè½ÏΪ·±Ëö£¬´ó¸Å·ÖΪÈý²¿·ÖÄÚÈÝJenkins°²×°¡¢SonarCube°²×°¡¢ÒÔ¼°OCLint°²×°¡£ÆäÖÐOCLintÊǺËÐIJ¿·Ö£¬¶øÕⲿ·Ö×îΪ·±Ëö£¬Ò»¶¨Òª×¢Òâ·¾¶¡¢»·¾³±äÁ¿µÈϸ½ÚÉèÖá£

©–¡¢»ù´¡»·¾³×¼±¸

ÒòΪ²¿·ÖÈí¼þÊÇÖ±½Ó½âѹʹÓõģ¬ÎªÁËÈ·±£»·¾³Ò»Ö£¬ÎÒÃÇÏÖÔÚÓû§Ä¿Â¼Ï½¨Á¢Ò»¸öjenkinsĿ¼£¬½«ËùÓнâѹʹÓõÄÈí¼þ·ÅÔÚ¸ÃĿ¼Ï¡£ÔÚÖÕ¶ËÃüÁîÐÐÖÐʹÓÃÈçÏÂÃüÁÁ¢Ä¿Â¼£º

cd ~
mkdir jenkins

ʹÓÃÈçÏÂÃüÁî»ñÈ¡jenkinsĿ¼µÄÍêÕû·¾¶£º

cd ~/jenkins
pwd
# ÎÒ±¾»úµÄ·¾¶ÊÇ /Users/drsun/jenkins

×¢Òâ±£´æ¸Ã·¾¶£¬½ÓÏÂÀ´»áƵ·±Ê¹ÓøÃ·¾¶¡£

Ò»¡¢Jenkins°²×°

°æ±¾ £º2.89.4

ÏÂÔØµØÖ·£ºhttps://jenkins.io/download/

ÍÆ¼öÖ±½ÓʹÓÃdmg°²×°°ü£¬Ë«»÷°²×°¼´¿É£¬°²×°ºóµÄһЩµ÷Õû£¨Èçhttp¶Ë¿Ú¡¢Ð¶ÔصÈ)¡£

Õâ¸ö°æ±¾JenkinsµÄ²å¼þ·þÎñÆ÷ÆôÓÃÁËhttps£¬°²×°¹ý³ÌÖлá³öÏÖÈçÏÂÌáʾ£º

This Jenkins instance appears to be offline

½â¾öµÄ·½Ê½Êǽ«hudson.model.UpdateCenter.xmlÎļþÖеÄhttps¸ÄΪhttp£¬ÔÚMacϵͳϸÃÎļþλÓÚ/Users/Shared/Jenkins/Home/hudson.model.UpdateCenter.xml¡££¨×¢ÒâÐèҪʹÓÃsudoȨÏÞÐ޸ģ©

ÐÞ¸ÄÍê³Éºó£¬Ö´ÐÐÈçÏÂÃüÁîÖØÆôJenkins·þÎñ£º

sudo launchctl unload
/Library/LaunchDaemons/org.jenkins-ci.plist
sudo launchctl load
/Library/LaunchDaemons/org.jenkins-ci.plist

ÖØÆôÍê³Éºó£¬¼ÌÐøÍê³ÉJenkinsÅäÖ㬲å¼þ°²×°Ö±½ÓĬÈϰ²×°¼´¿É£¬×¢ÒâÒ»¶¨Òª°²×°Git²å¼þ£¬ÈçÏÂͼËùʾ£º

Jenkins·þÎñĬÈϵļàÌý¶Ë¿ÚÊÇ8080£¬Õâ¸ö¶Ë¿Ú±È½Ï³£Ó㬿ÉÒÔͨ¹ýÈçÏÂÃüÁîÀ´µ÷Õû¶Ë¿Ú£¬±ÜÃâÓëÆäËü·þÎñ³åÍ»¡£

sudo defaults write
/Library/Preferences/org.jenkins-ci httpsPort 8100

ÕâÀïÎÒÃǽ«JenkinsµÄ¶Ë¿Ú¸ÄΪÁË8100£¬Ê¹ÓÃ֮ǰµÄÃüÁîÖØÆôJenkins·þÎñ£¬½ÓÏÂÀ´¾Í¿ÉÒÔʹÓÃhttp://localhost:8100 À´·ÃÎÊJenkinsÁË¡£

¶þ¡¢SonarCube°²×°

°æ±¾ £º6.7.2

ÏÂÔØµØÖ·£ºhttps://www.sonarqube.org/downloads/

ÓÉÓÚObjective-c·ÖÎö²å¼þ²»Ö§³Ö×îеÄ7.0°æ±¾£¬ËùÒÔÖ»ÄÜʹÓÃ6.7°æ±¾µÄSonarCube¡£SonarCubeµÄ°²×°±È½Ï¼òµ¥£¬Ö±½Ó½âѹµ½Ö®Ç°µÄjekinsĿ¼¼´¿É¡£Ê¹ÓÃÈçÏÂÃüÁîÆô¶¯SonarCube£º

~/jenkins/sonarqube-6.7.2/bin/macosx-universal-64/sonar.sh

Æô¶¯Ö®ºó£¬¿ÉÒÔͨ¹ýhttp://localhost:9000/À´·ÃÎÊSonarCube¡£SonarCubeµÄÅäÖò»¶à£¬Èç¹ûÐèÒªÔÚÉú²ú»·¾³ÖÐʹÓã¬ÐèÒªÔÙÅäÖÃÊý¾Ý¿âÁ¬½Ó£¬ÕâÀïÎÒÃÇʹÓÃÄÚÖõÄÊý¾Ý¿âÀ´ÅÜͨÁ÷³Ì¡£

´ÓÕâÀïÏÂÔØSonarCubeµÄObjective-c²å¼þ£¨°æ±¾£º0.6.2£©£¬½«jarÎļþ¿½±´µ½~/jenkins/sonarqube-6.7.2/extensions/pluginsĿ¼Ï£¬Í¨¹ýAdministration->System->System Info->RestartServerÖØÐÂÆô¶¯SonarCube¡£Ö®ºó¿ÉÒÔͨ¹ýAdministration->System->Update Center->Installed²é¿´°²×°ºÃµÄObjective-c²å¼þ£¬ÈçÏÂͼËùʾ£º

Èý¡¢OCLint°²×°

ÕâÒ»²½ÖÐÐèÒª°²×°Èý¸öÈí¼þ£¬ÆäÖÐxcpretty¾Í½«xcodebuildµÄÊä³öת»¯ÎªoclintËùÐèÒªµÄjsonÎļþ£¬È»ºóʹÓÃoclint¸½´øµÄoclint-json-compilation-databaseÃüÁî¶ÔÏîÄ¿½øÐзÖÎöÉú³É·ÖÎö±¨¸æ£¬×îºóͨ¹ýSonarScanner½«·ÖÎö±¨¸æ·¢ËÍÖÁSonarCubeÍê³ÉÒ»¸öÍêÕûµÄ·ÖÎö¹ý³Ì¡£

1. °²×°OCLint£¨°æ±¾£º0.13.1£©

´ÓÕâÀïÏÂÔØ£¬½«oclint-0.13.1-x86_64-darwin-17.4.0.tar.gz ½âѹÖÁ~/jenkinsĿ¼¡£

2. °²×°xcpretty£¨°æ±¾£º0.28)

ʹÓÃÈçÏÂÃüÁî°²×°xcpretty£º

sudo gem install xcpretty

°²×°Íê³ÉºóʹÓÃÈçÏÂÃüÁî¼ì²é°æ±¾£º

xcpretty -v

3. °²×°SonarScanner£¨°æ±¾£º3.0.3.778£©

´ÓÕâÀïÏÂÔØ°²×°°ü£¬½«°²×°°ü½âѹÖÁ~/jenkinsĿ¼¡£

4. ÉèÖÃPATH±äÁ¿

ÒòΪÎÒÃÇÐèÒª´ÓÖÕ¶ËÖ±½ÓÖ´ÐÐoclintµÈ£¬ËùÒÔÐèÒª½«ËüÃÇÌí¼ÓÖÁPATH±äÁ¿£¬Èç¹ûÄãʹÓõÄÊÇbash£¨Ò»°ãĬÈϵͼÊÇbash£©£¬Í¨¹ýÈçÏÂÃüÁîÉèÖÃPATH£¬²¢Ê¹ÆäÉúЧ£¨×¢ÒâÈçÏÂÃüÁîÖеÄ·¾¶£¬½«drsunÐÞ¸ÄΪÄãµÄÓû§Ãû£¬¸Ã·¾¶Ò²¾ÍÊÇÎÒÃÇÔÚµÚ©–²½Ç¿µ÷µÄ·¾¶£©

echo "export
PATH=$PATH:/Users/drsun/jenkins/oclint-0.13.1/bin"
>> ~/.bashrc
echo "export
PATH=$PATH:/Users/drsun/jenkins/sonar-scanner-
3.0.3.778-macosx/bin" >> ~/.bashrc
source ~/.bashrc

ËÄ¡¢´´½¨·ÖÎöÏîÄ¿

1. ÊÖ¶¯Ö´ÐÐ

ÔÚµÚÈý²½ÖÐÒѾ­°²×°ºÃÁËËùÐèÒªµÄÈí¼þ£¬²¢ÇÒÒ²ÉèÖúÃÁËPATH£¬´Ëʱ¿ÉÒÔͨ¹ýÖÕ¶ËÀ´ÊÖ¶¯Éú³ÉÒ»¸öÏîÄ¿·ÖÎö±¨¸æ£¬Îª½ÓÏÂÀ´ÔÚJenkinsÖнøÐгÖÐø·ÖÎö×¼±¸¡£ÕâÀïÎÒÃÇÒÔAFNetworkingµÄ´úÂëΪÀýÀ´½øÐзÖÎö£¬ÒÔϲÙ×÷¾ùÔÚAFNetworkingÔ´´úÂëĿ¼ÏÂÖ´ÐС£ÁíÍâ×¢ÒâXcodeµÄ°æ±¾£¬ÎÒÓõİ汾ÊÇVersion 9.2 (9C40b)£¬Èç¹ûÄãµÄ°æ±¾²»Ò»Ö£¬ÇëÏÈÔĶÁÍê1.6£©Ö®ºóÔÙÀ´Ö´Ðи÷¸ö²½Öè¡£

1.1£©ÇåÀí¹¤³Ì

xcodebuild -workspace AFNetworking.xcworkspace
-scheme AFNetworking\ iOS -sdk iphonesimulator11.2
-configuration Debug clean

1.2£©Éú³Écompile_commands.json

xcodebuild -workspace AFNetworking.xcworkspace
-scheme AFNetworking\ iOS -sdk iphonesimulator11.2
-configuration Debug
COMPILER_INDEX_STORE_ENABLE=NO | xcpretty -r json
-compilation-database -o compile_commands.json

1.3£©Éú³Éoclint.xml

oclint-json-compilation-database -- -report-type
pmd -o oclint.xml -max-priority-1 100000 -max
-priority-2 100000 -max-priority-3 100000

1.4£©´¦Àíoclint.xml

oclintÉú³ÉµÄ±¨¸æÖÐÈçÏÂÐÎʽµÄ¹æÔò»áµ¼ÖÂObjective-c·ÖÎö²å¼þ³ö´í£¨ERROR: The rule 'OCLint:compiler warning' does not exist.£©£¬

<violation begincolumn="24" endcolumn="0"
beginline="90" endline="0"
priority="2" rule="compiler warning"
ruleset="clang">
implicit conversion loses integer precision: 'NSInteger'
(aka 'long') to 'int'
</violation>

ÕâЩ¹æÔòÒ»°ãÊDZàÒ뾯¸æ£¬Õý³£À´ËµÔÚ¹¤³ÌÖÐÊÇÓ¦¸ÃÏû³ý±àÒ뾯¸æµÄ£¬µ«ÊǶÔÓÚһЩÀúÊ·ÏîÄ¿À´Ëµ¿ÉÄÜÊDz»ÏÖʵµÄ¡£Objective-c·ÖÎö²å¼þûÓн«ÕâЩ±àÒ뾯¸æ×ª»¯Îª¶ÔÓ¦µÄ¹æÔò£¬¿ÉÒÔʹÓÃÈçÏÂpython½Å±¾½«oclint.xmlÖеÄÕâЩ¹æÔòɾ³ýµô£¬½Å±¾µÄ´¦Àí·½Ê½±È½Ï¼òµ¥´Ö±©£¬Ö±½Ó½«ËùÓÐrulesetÊÇclangµÄXML½ÚµãÈ«²¿É¾µôÁË¡£

#!/usr/bin/python
import xml.etree.ElementTree as ET
import os
os.system('mv oclint.xml oclint.xml.origin')
tree = ET.ElementTree(file='oclint.xml.origin')
root = tree.getroot()
del_items = []
for child in root:
for one in child:
if one.attrib['ruleset'] == 'clang':
print child.attrib['name']
del_items.append(child)
break
for del_item in del_items:
root.remove(del_item)
tree.write('oclint.xml')

½«ÉÏÊö´úÂë±£´æµ½ ~/jenkinsĿ¼Ï£¬ÃüÃûΪrm_clang.py£¬Ê¹ÓÃÈçÏÂÃüÁî´¦Àíoclint.xml¡£

python ~/jenkins/rm_clang.py

×¢Ò⣺AFNetworkingµÄ´úÂëʵ¼ÊÉϲ»ÐèÒªÕâÑù´¦Àí£¡

1.5£©Éú³ÉSonar±¨¸æ

½«ÈçÏÂÄÚÈݱ£´æÎªsonar-project.propertiesÎļþ£¬·Åµ½AFNetworkingĿ¼Ï¡£

sonar.projectKey=AFNetworking
sonar.host.url=http://localhost:9000
sonar.login=admin
sonar.password=admin
sonar.language=objc
sonar.objectivec.workspace=AFNetworking.xcworkspace
sonar.objectivec.appScheme=AFNetworking iOS
sonar.sources=AFNetworking
sonar.objectivec.oclint.report=oclint.xml

ÉÏÊöÎļþÖУ¬µÚÒ»²¿·ÖÊÇSonarCubeÏà¹ØµÄÅäÖã¬Ö÷ÒªÊÇsonar.host¡¢sonar.login¡¢sonar.passwordÕ⼸ÏîÐèÒª¸ù¾Ý×Ô¼ºµÄÇé¿öÐ޸ģ¬ÁíÍâ²»ÐèҪרÃÅÔÚSonarCube´´½¨ÏîÄ¿£¬Èç¹ûÏîÄ¿²»´æÔÚSonarScanner»á×Ô¶¯´´½¨¡£

µÚ¶þ²¿·ÖÊÇXcode¹¤³ÌÏà¹ØµÄÅäÖ㬸ù¾ÝÏîĿʵ¼ÊÇé¿öÌîд¼´¿É¡£

µÚÈý²¿·ÖÊÇoclintÉú³ÉµÄ·ÖÎö±¨¸æ¡£

Ö´ÐÐÈçÏÂÃüÁî¼´¿ÉÔÚSonarCubeÖв鿴·ÖÎö±¨¸æ£º

sonar-scanner

ÃüÁîÖ´³É¹¦Ö®ºó¿ÉÒÔ¿´µ½ÕâÑùµÄÊä³ö

INFO: Analysis report generated in 268ms, dir size=390 KB
INFO: Analysis reports compressed in 105ms, zip size=106 KB
INFO: Analysis report uploaded in 199ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard/index/AFNetworking
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://localhost:9000/api/ce/task?id=AWIeTscSMwxcUMvSI7Pm
INFO: Task total time: 8.012 s
INFO: ---------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ---------------------------------------------------
INFO: Total time: 9.999s
INFO: Final Memory: 47M/335M
INFO: ---------------------------------------------------

Ö±½ÓÔÚä¯ÀÀÆ÷Öдò¿ªÉÏÃæµÄÁ´½Ó¾Í¿ÉÒÔ¿´·ÖÎö±¨¸æÁË¡£

1.6£©ÃüÁî˵Ã÷

֮ǰµÄ¼¸¸ö²½ÖèÖÐʹÓõÄÃüÁîÖÐÓÐÒ»¶Ñ²ÎÊý£¬ÔÚÕâÀï¼òµ¥µÄ˵Ã÷һϡ£xcodebuildÃüÁîÖÐÖ÷ÒªÓÃÁË-workspace ¡¢-scheme ¡¢-configuration¡¢-sdk £¬ÕâЩ²ÎÊýÔõôÀ´µÄÄØ£¿ÆäÖÐ-sdk ²ÎÊýÎÒÃÇ¿ÉÒÔͨ¹ýÈçÏÂÃüÁî»ñµÃ£º

xcodebuild -showsdks
#Êä³öÈçÏÂËùʾ
iOS SDKs:
iOS 11.2 -sdk iphoneos11.2
iOS Simulator SDKs:
Simulator - iOS 11.2 -sdk iphonesimulator11.2
macOS SDKs:
macOS 10.13 -sdk macosx10.13
tvOS SDKs:
tvOS 11.2 -sdk appletvos11.2
tvOS Simulator SDKs:
Simulator - tvOS 11.2 -sdk appletvsimulator11.2
watchOS SDKs:
watchOS 4.2 -sdk watchos4.2
watchOS Simulator SDKs:
Simulator - watchOS 4.2 -sdk watchsimulator4.2

ËùÒÔ£¬¿ÉÒÔÈ·¶¨-sdk iphonesimulator11.2²ÎÊý¡£

ÆäËü¼¸¸ö²ÎÊý¿ÉÒÔͨ¹ýÈçÏÂÃüÁî»ñµÃ£º

xcodebuild -list
#Êä³öÈçÏÂËùʾ
Information about project "AFNetworking":
Targets:
AFNetworking iOS
AFNetworking watchOS
AFNetworking OS X
AFNetworking tvOS
AFNetworking iOS Tests
AFNetworking Mac OS X Tests
AFNetworking tvOS Tests
Build Configurations:
Debug
Release
If no build configuration is specified and -scheme
is not passed then "Release" is used.
Schemes:
AFNetworking iOS
AFNetworking OS X
AFNetworking tvOS
AFNetworking watchOS

¸ù¾ÝÎÒÃÇÐèÒª·ÖÎöµÄÄÚÈÝÑ¡Ôñ¶ÔÓ¦µÄ²ÎÊý¼´¿É¡£

¹ØÓÚoclint-json-compilation-databaseÃüÁîÐèÒªÌØ±ð˵Ã÷µÄÊÇ£¬¸ÃÃüÁî×îÖÕ»áµ÷ÓÃoclintÃüÁËùÒÔÔÚ1.3£©²½ÖèÖÐ --£¨Ë«ºáÏߣ©Ö®ºóµÄ²ÎÊýʵ¼ÊÉÏÊÇ´«µÝ¸øoclintµÄ¡£¶ø¶ÔÓÚoclint-json-compilation-databaseÃüÁîÐèÒªÌØ±ð×¢ÒâµÄÊÇ-e²ÎÊý£¬¸Ã²ÎÊý¿ÉÒÔ°ïÖúÎÒÃÇÅųý²»ÐèÒª½øÐзÖÎöµÄµÚÈý·½´úÂ룬±ÈÈçʹÓÃÁËcocoapodsÖ®ºó£¬¾ÍÐèҪʹÓÃÈçÏÂÃüÁîÀ´½«PodsĿ¼Åųý¡£

oclint-json-compilation-database
-e Pods -- -report-type pmd -o oclint.xml -max-priority-1
100000 -max-priority-2 100000 -max-priority-3
100000

Õâ¸ö²ÎÊý²»ÐèÒªÌØ±ðµÄÇø·ÖĿ¼µÄ·¾¶£¬Ö»ÒªÄ¿Â¼Ãû¼´¿É¡£Èç¹ûʹÓõÄpod¿â½Ï¶à£¬¶øÊ¹ÓÃoclintµÄʱºòûÓÐÅųýµÄ»°¿ÉÄܵ¼ÖÂoclintÒª´¦ÀíµÄÎļþÌ«¶à£¬¶ø×îÖÕÉú³ÉµÄoclint.xml²»ÍêÕû¡£

ÁíÍ⻹ÐèÒªÌØ±ð˵Ã÷µÄÊÇ£¬Èç¹ûÏîÄ¿±È½Ï´óoclint-json-compilation-databaseÖ´ÐеÄʱ¼ä»á±È½Ï³¤£¬Ê®¼¸·ÖÖÓÒÔÉÏÊÇÕý³£µÄ¡£

ÔÚoclint·ÖÎö¹ý³ÌÖпÉÄÜ»á³öÏÖ¸÷ÖÖÎÊÌ⣬ÎÒÓöµ½Á½¸ö±È½Ï¼¬ÊÖµÄÎÊÌ⣬һÊÇ"error: one compiler command contains multiple jobs¡±£¬ÁíÒ»¸öÊÇ¡°cannot open report file¡±¡£

¹ØÓÚµÚÒ»¸ö£¬×îÖÕÈ·ÈÏÊÇpodµÄÎÊÌ⣬ÐèÒªÔÚxcodebuildÖмÓÈëCOMPILER_INDEX_STORE_ENABLE=NO¡£»òÕßÔÚ¹¤³ÌÖÐÅäÖÃÒ²ÐУ¬µ«Ö±½ÓÔÚÃüÁîÐÐÖмÓÈë±È½Ï·½±ã¡£ÔÚÉÏÃæµÄÃüÁîÖÐÎÒÒѾ­¼ÓÈëÁË¡£

¹ØÓÚµÚ¶þ¸öÎÊÌâ£¬ÕæÊǰÙ˼²»µÃÆä½â£¬×îÖÕͨ¹ýÊä³öÖØ¶¨ÏòÉú³ÉÁËreport£¬´ò¿ª·¢ÏÖÐí¶àÎļþûÓзÖÎö£¬Ô­ÒòÊÇcannot reading file£¬È»ºóÌáʾtoo many opened files¡£Ò»¿ªÊ¼Ã»ÓÐÒâʶµ½£¬ºóÀ´Í»È»ÏëÃ÷°×ÁË£¬ÕâÊÇoclint´¦ÀíµÄÎļþÌ«¶àÁË£¬ÐèҪͨ¹ý-e²ÎÊýÀ´ÅųýһЩ²»ÐèÒª·ÖÎöµÄ¿âÎļþÀ´¼õÇáoclintµÄ¸ºµ£¡£

³öÏÖµÚ¶þ¸öÎÊÌâµÄʱºò£¬»¹ÓÐÒ»¸öÇé¿ö¿ÉÄÜÊÇÐèÒªÇåÀíÒ»ÏÂÕû¸öÏîÄ¿µÄ´úÂ룬À´ÖØÐÂÖ´ÐзÖÎöÀ´½â¾ö¡£

2. ÔÚJenkinsÖÐÖ´ÐÐ

ÆäʵÉÏÒ»²½Öеĸ÷ÖÖÃüÁî¾ÍÊÇÎÒÃÇÐèÒªÓÃJenkins×Ô¶¯Ö´Ðеģ¬ÔÚÊÖ¶¯Íê³ÉÒ»´Î·ÖÎö±¨¸æºó£¬Ê¹ÓÃJenkins×Ô¶¯¹¹½¨¾Í·Ç³£µÄ¼òµ¥ÁË£¬³öÁËÎÊÌâÒ²ºÜÈÝÒ×¼ì²é¡£

ÒòΪÔÚÎÄÕ¿ªÍ·£¬¾ÍÒѾ­Ìá¹ýJenkinsµÄ¹¹½¨»·¾³¸úÊÖ¶¯Ö´ÐеĻ·¾³ÊDz»Ò»ÑùµÄ¡£ÒòΪJenkinsÔÚMacϵͳÏ´´½¨ÁËÒ»¸öÃûΪJenkinsµÄÓû§£¬ËùÓй¹½¨²Ù×÷ÊÇÒÔ¸ÃÓû§Ö´Ðеģ¬Òò´Ë»·¾³ÉÏÊÇÓвîÒìµÄ¡£

2.1£©ÅäÖû·¾³±äÁ¿

ÏÈͨ¹ýϵͳ¹ÜÀí->ϵͳÉèÖÃ->È«¾ÖÊôÐÔÀ´ÅäÖû·¾³±äÁ¿£¬ÈçÏÂͼËùʾ£º

Ôö¼Ó¼üLC_ALLÖµen_US.UTF-8£¬Õâ¸öÊÇΪÁ˽â¾öxcprettyÎÞ·¨´¦ÀíÖÐÎÄ×Ö·ûµÄÎÊÌâ¡£

Ôö¼Ó¼üPathÖµ/Users/drusun/jenkins/oclint-0.13.1/bin:/Users/drusun/jenkins/sonar-scanner-3.0.3.778-macosx/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:£¬ÕâÒ»²½µÈͬÓÚµÚÈý²½ÖеÄÉèÖÃPATH±äÁ¿£¬Í¬ÑùÐèÒªÐ޸ķ¾¶ÎªÄã»úÆ÷ÉϵÄ·¾¶¡£

Ôö¼Ó¼üPYTHONIOENCODINGÖµutf-8£¬Õâ¸öÊÇΪÁ˽â¾örm_clang.py½Å±¾ÎÞ·¨´¦Àí°üº¬ÖÐÎÄ×Ö·ûµÄÎÊÌâ¡£

2.2£©´´½¨ÏîÄ¿

ÈçͼËùʾ£¬Ð½¨Ò»¸ö¹¹½¨Ò»¸ö×ÔÓÉ·ç¸ñµÄÈí¼þÏîÄ¿ÈÎÎñ¡£È»ºó£¬ÔÚÔ´Âë¹ÜÀíÖÐÑ¡ÔñGit£¬ÈçÏÂͼËùʾ£¬½«AFNetworkingµÄ²Ö¿âµØÖ·https://github.com/AFNetworking/AFNetworking.gitÌîÈë¡£

ÔÚ¹¹½¨ÖÐÑ¡ÔñÔö¼Ó¹¹½¨²½Öè->Execute shell£¬ÈçÏÂËùʾ£º

ÄÚÈÝÈçÏ£º

xcodebuild -workspace AFNetworking.xcworkspace -scheme AFNetworking\
iOS -sdk iphonesimulator11.2 -configuration Debug clean
xcodebuild -workspace AFNetworking.xcworkspace
-scheme AFNetworking\ iOS -sdk iphonesimulator11.2
-configuration Debug COMPILER_INDEX_STORE_ENABLE=NO
| xcpretty -r json-compilation-database -o compile_commands.json
oclint-json-compilation-database -- -report-type
pmd -o oclint.xml -max-priority-1 100000 -max-priority-2
100000 -max-priority-3 100000
python /Users/drsun/jenkins/rm_clang.py
cp /Users/drsun/jenkins/sonar-project.properties
.
sonar-scanner
rm oclint.xml oclint.xml.origin sonar-project.properties
compile_commands.json

ÉÏÃæµÄ½Å±¾ÄÚÈݾÍÊÇÔÚÉÏÒ»²½ÊÖ¶¯Ö´ÐÐÖÐÊäÈëµÄÃüÁµã»÷±£´æºó£¬ÔÙµã»÷×ó²àµÄÁ¢¼´¹¹½¨½øÐÐÏîÄ¿¹¹½¨¡£

ÔÚÕæÊµµÄÏîÄ¿ÖУ¬ÎÒÃÇ¿ÉÄÜÐèҪÿÌì°ëÒ¹1µãµÄʱºò½øÐÐÒ»´Î¹¹½¨£¬Õâʱ¿ÉÒÔͨ¹ý¹¹½¨´¥·¢Æ÷->Build periodicallyÀ´ÉèÖã¬ÈçÏÂËùʾ£º

Îå¡¢×ܽá

ÖÁ´Ë£¬ÎÒÃÇÒѾ­¿ÉÒÔÓÃJenkins+OCLint+SonarCubeÀ´½øÐÐiOSÏîÄ¿µÄ´úÂë·ÖÎöÁË¡£ÔÚÕâÆªÎÄÕÂÀïJenkinsµÄ×÷ÓúÃÏñСÁËÒ»µã£¬µ«ÔÚ¾ßÌåµÄÏîÄ¿ÖпÉÄÜ»¹»áʹÓÃJenkinsÀ´×Ô¶¯´ò°ü£¬×öÿÈÕ¹¹½¨µÈ£¬ÕâʱºòÔÚÔö¼ÓÒ»¸ö¹¹½¨ºó²Ù×÷£¬½«±¾ÎÄÖеĴúÂë·ÖÎö½áºÏ½øÈ¥¡£ÁíÍ⣬OCLint»¹¿ÉÒÔ¶ÔһЩ¹æÔò½øÐÐÉèÖÃÀ´Âú×ãÏîÄ¿¹æ·¶£¬¾ßÌå¿ÉÒԲο¼¹Ù·½Îĵµ¡£

   
5766 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ