之前一篇关于iOS持续集成的文章iOS的自动化打包,文章主要介绍了iOS编译、签名的理论知识以及如何通过shell脚本调用第三方fastlane或者shell脚本调用Xcode提供的原生编译、签名命令进行打包、签名。
本篇介绍如果通过Jenkins构建打包任务、Jenkins远程登录以及Jenkins的Master/Slave架构。
1.1 Jenkins安装
Jenkins安装有几种方式:
a、通过pkg安装包安装
https://jenkins.io/content/thank-you-downloading-os-x-installer/#stable
b、直接下载Jenkins.jar
http://mirrors.jenkins-ci.org/war-stable/latest/jenkins.war
c、使用Homebrew安装
brew install jenkins
三种安装方式的优缺点:
a、通过pkg安装包安装:使用pkg安装虽然是一键,但是比较坑的是安装在Shared用户下,这样的话很多本机的配置如SSH key等会有一些权限问题,环境变量使用也不是很方便,一些配置需要在Shared用户上单独配置,好处是干净,但是Xcode已经是在当前用户下了,Shared用户的配置只能干净一部分吧,干脆点,安装在当前用户,不用 Shared用户了。这样很多配置是不用在Jenkins中配置的,如上方所详的SSH key,以及各种环境变量都是在当前用户下,配置好后在Jenkins中不需要再配置。
b、直接下载Jenkins.jar:直接运行 jar 是最简单的方式,不能再后台运行,总是开一个终端来运行 Jenkins 万一不小心关掉了就不好了,如果要后台运行,就需要重新开启。
c、使用Homebrew安装:使用Homebrew安装Jenkins只需要一条命令,并且不存在以上两种安装方式的缺点,不需要额外配置,开机自动启动Jenkins服务而不需要手动启动。
Homebrew安装Jenkins如下:brew install jenkins
安装完成后可以使用 brew services 管理 Jenkins 启动
查看帮助说明
1.2 环境变量配置
终端输入以下命令,打开bash_profile文件
open ~/.bash_profile
主要配置各种环境变量
RVM环境变量:/usr/local/rvm/bin
ruby环境变量:/usr/local/rvm/rubies/ruby-2.3.0
注意
1、使用Jenkins调用pod命令报如下错误的解决办法就是在bash_profile中增加export LANG=en_US.UTF-8
2、$HOME目录下的配置文件里关于RVM的环境配置
1.3 Jenkins配置
启动Jenkins服务之后,在浏览器中输入
http://localhost:8080
使用Jenkins默认host和port
1.3.1 修改Jenkins的Host和Port
如果是通过brew install Jenkins方式安装的Jenkins时,修改Jenkins的host和port:
打开配置文件:/usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist,找到httpListenAddress和httpPort,即为要修改的host和port。
1.3.2 如何安装Jenkins默认没有的插件
需要去Jenkins plugins官网下载需要的Jenkins插件
官网:https://wiki.jenkins-ci.org/display/JENKINS/Plugins
例子:
例如需要安装Jenkins RVM插件
1、rvm插件地址:
https://wiki.jenkins-ci.org/display/JENKINS/RVM+Plugin
2、下载到本地后,会得到一个rvm.hpi的文件
3、插件管理-高级-上传插件-选取文件-上传
1.3.3 Jenkins运行脚本配置
1.4 Jenkins的Master/Slave架构
1.4.1 Jenkins的Master/Slave架构
Jenkins的Master/Slave架构可以有效解决分布式构建。Master提供web接口让用户来管理job和slave,job可以运行在master本机或者被分配到slave上运行。一个master可以关联多个slave用来为不同的job或相同的job的不同配置来服务。
众所周知,开发mac系统软件时,编译环境必须使用 Mac OS系统,为了解决Jenkins部署在非 Mac OS 系统中无法构建mac系统软件,故而引入Jenkins的Master/Slave分布式构建架构。
如何添加mac-slave结点:
https://wiki.jenkins-ci.org/display/JENKINS/Step+by+step+guide+to+set+up+master+and+slave+machines
1.4.2 添加/配置Slave结点
1.4.3 Slave启动
启动slave的四种方式:
https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds
对于Slave启动方式, 由于 Mac OS 系统默认支持SSH,所以使用SSH启动更加方便。
1.4.4 配置SSH
方式1: SSH login with Username&password
在”系统管理”-> “Manage Credentials” 里Add Credentials,并选”Username with pasword”
“Username”栏应填写Slave结点机器的开机账号,”Password”栏应填写Slave结点机器的开机密码。
方式2、SSH login without password
首先需要生产rsa密钥对,参照 http://www.linuxproblem.org/art_9.html 生成key。
生成key后,在”系统管理”-> “Manage Credentials” 里Add Credentials,并选”SSH Username with private key”
1.4.5 创建/配置Slave Job
配置Slave Job(如何创建Job在前文中已经说明)
勾选中”Restrict where this project can be run”
“Label Expression”应填写创建Slave结点时命名的标签(Tag)名称。
1.4.6 发布构建好的ipa
这个比较多方法,可以放到ftp,也可能放到NFS上,又或者特定的某台机器。我选择的是将通过SCP将构建的IPA拷贝到内部共享的一个服务器上。这也分几步:
a、从”系统管理” -> “管理插件” 安装SCP插件
b、在”系统管理” -> “系统设置”里的”SCP repository hosts”模块里配置SCP插件,新建一个SCP site “tmp”
c、配置ios对应Job,增加一个”构建后操作”,选择”Publish artifacts to SCP Repository”, 并设置SCP site为tmp,然后设置对应文件源及目的地,如Source为”ipa/*.ipa”, Destination为”iPhoneApp/“。
1.4.7 Slave Tips
使用fastlane的sigh在 mac Slave 结点机器上下载相关配置文件时,无法读取Slave机器Keychain中保存的密码。
错误如下:
解决方法:
需要通过命令解锁Slave结点机器的Keychain。
security unlock-keychain -p [password] $HOME/Library/Keychains/login.keychain
1.5 如果利用Jenkins搭建我们的持续集成框架
基于以上介绍,Jenkins环境已经搭建完成,如何使用Jenkins环境搭建我们自己的持续集成环境呢?
其实我们自己的持续集成环境很简单,只利用到了Jenkins执行Shell脚本的功能以及邮件通知的功能,再多一点点就是CVS和Git功能。当然Jenkins也可以使用Xcodebuild插件进行iOS程序的打包,但是对于我们产品的特殊性需求,还有就是我个人喜欢使用shell脚本语言编写自动化打包工具。
使用命令行生成CertificateSigningRequest.certSigningRequest文件
通过kechain生成CertificateSigningRequest.certSigningRequest文件时,一直有个疑惑:私钥是如何生成的,生成的私钥又在哪里?
根据上图的应用程序签名的流程,首先生成私钥、然后生成CSR文件,然后根据CSR文件生成证书,然后根据证书生成provisionProfile文件等。
那么本章只介绍生成私钥,然后通过私钥生成CSR文件。
1、生成私钥:
2、生成CSR:
参考:
https://pewpewthespells.com/blog/migrating_code_signing.html
关于如何验证制作的推送证书可用
iOS有时候测试或者线上收不到推送消息,大家就会首先将问题抛给iOS开发人员,但是推送消息收不到有很多种原因,只要制作的证书没有问题,跟iOS开发人员没有毛线关系啊。
那么如何去证明我们的证书制作的是没有问题的呢?
有两个办法可以来验证:
方式一、写一个模拟服务端的推送程序,模拟推送一条消息。但是这种办法有个弊端,当苹果的APNs挂了、延迟、国内被墙等时,也是无法收到推送消息,所以无法判断是否是推送证书有问题。
我们也提供了一个demo,如下图:
方式二、通过openssl命令验证
1、导出.cer证书文件
keychain中导出推送证书时要选中证书文件,不要展开private key。注意导出为.cer文件,命名为:aps_development.cer。
2、导出.p12私钥文件
keychain中选中推送证书的私钥文件,注意导出为.p12文件,命名为:aps_push.p12
3、转换为.pem文件
上面两个文件都要先转换为.pem文件,最终要将转换后的两个.pem文件合并为一个.pem文件。
a、将aps_development.cer转换为.pem文件:
b、将aps_push.p12转换为.pem文件:
这里首先需要我们输入在第二步导出私钥文件中定义的密码。其次,还需要为新生成的pem文件设置一个密码。此密码为上传PUSH平台所用的密码!所以,推荐所有密码一致,以防混淆。
4、合并.pem文件
合并上一步得到的两个文件:
5、测试
为了测试证书是否工作,执行下面的命令:
它将尝试发送一个规则的,不加密的连接到APNS服务。如果看到下面返回,即能够到达APNS。按下Ctrl+C关闭连接。
如出现上图所示则表明是APNs是可访问的。
测试证书是否正确:
首先会要求你输入密码,即私钥那一步生成的密码。
如出现上图所示则表明证书有效,连接成功。
Xcode高版本支持低版本系统真机调试
随着Xcode8的发布,Xcode默认最低支持的iOS版本为8.0,所以想调试iOS8以下真机就比较头痛。那么本文就以Xoce8支持iOS7为例子来介绍高版本Xcode如何支持低版本系统真机调试。
一、首先得有低版本系统的SDK。获取低版本系统的SDK有三种方式:
方式1:在升级Xcode之前,请前往
拷贝将要被摒弃的SDK。
方式2:伸手党方式从好心人那里下载人家已经保存下来的SDK。
如:https://github.com/duoduoxiao/iOS7SDK.git
方式3:安装低版本的Xcode,安装完之后前往
取出SDK或者直接使用低版本Xcode进行调试。
安装低版本Xcode:
1、下载dmg安装;
2、通过ruby插件安装;
二、其次就是将低版本的SDK拷贝到
三、修改 SDKSettings.plist
前往
增加将要支持的SDK。
小技巧:SDKSettings.plist
在文件夹
中是被锁保护了,所以想修改它的话可以将其拷贝到其他文件夹修改完之后再覆盖原文件夹中的SDKSettings.plist
。
四、重启Xcode
iOS的自动化打包
虽说网上关于iOS的持续集成的文章数不胜数,还是那句话:不经风雨是见不到彩虹的,不亲身经历,你根本体会不到踩坑的滋味是多么酸爽。酸爽的滋味其实并不是从iOS的自动化打包开始,从构建我们产品2.0版本就已经有尝不尽的酸爽味道,如:使用cocoapods打造智能化的iOS组件化方案,使用AFNetworking打造面向对象的网络组件并将AFNetworking升级到2.0、3.0,使用Realm替换SQLite的本地持久化方案,关于AOP面向切片编程实现的无埋点日志处理方案,使用Mantle打造智能化解析时与Realm如何结合,等等。以后会慢慢再总结吧。
我一直主张好钢应该用在刀刃上,如果将一个iOS研发人员一天当中有一个小时,哪怕半个小时去做打包的事情,我觉得都是极大的浪费。由于我们项目的特性或者吐槽点说是由于不规范,打一个安装包要牵扯到的资源有:项目部提供打包时APP名称调研表格、项目助理提供打包时配置信息表格(微信key、支付宝、微博、百度、友盟、不同tag的版本号、主题色)、产品UI组提供打包的图片资源、服务端提供打包时接口配置表格(接口地址、HOSID等)、服务端提供打包时开发者信息表格(公钥、私钥、签名信息等),而且由于每个部门使用不同的svn库,如果打包,单单准备这些资料恐怕就得一两个小时(无力吐槽点不是要找的配置信息多,而是有时候这些信息根本不全),这些太浪费时间了。
现在加上苹果对四大领域审核的全面收紧,导致我们之前在一个苹果账号下挂载多个APP的路走不通了,现在几乎是一个APP就需要一个苹果账号,这样的无技术含量且重复性的劳动量占据了开发人员很多的时间成本。
好了,这里我们只说面包,不谈爱情,也就是不谈理论,只谈实践。我们的自动化打包方案:Jenkins+python+shell+fastlane。
本章就只说说shell+fastlane
fastlane是一组工具套件,旨在实现iOS应用发布流程的自动化。
环境搭建:
按照之前的文章,在Mac XOS上
1、安装brew
2、安装ruby
3、通过gem安装fastlane
自动化打包的流程和思路:
1、利用python根据配置的版本号找到对应的代码tag。并将该路径传入shell build script。
2、根据入参scheme找到xcodeproj的路径和Info.plist的路径。
3、重置Info.plist,如:bundleid、version、displayName、微信key等。
4、替换资源文件,对某些资源文件进行加密处理。
5、cocoapods生成xcworkspace。
6、安装证书,并获取到证书codesign-identity。
7、添加用户名密码到keychain。
8、下载mobileprovision配置文件。
9、根据mobileprovision配置文件生成Entitlements,从而读取UUID和teamID。
10、重置exportPlist中teamID和exprotMethod项为打包做准备。
11、编译并打包。
亟待解决的问题:
1、钥匙串访问权限
2、多个证书的选择
3、账户密码添加到keychain
4、证书安装
5、证书codesign-identity的读取
6、mobileprovision文件下载问题
7、teamID获取问题
8、配置文件UUID获取问题
9、exprotPlist配置项问题
10、cocoapods中podfile文件动态修改问题
1、security命令
|
|
|
|
|
|
|
|
|
|
2、PlistBuddy命令
|
|
|
|
|
|
|
|
fastlane-credentias用法:
fastlane-sigh用法:
查看官方使用帮助:
根据官方使用帮助编写代码:
踩坑:
1、${sighMethod} 此参数为””时,创建或下载production配置文件,如果需要develop配置文件时,则需要配置成”development”。
2、–force true时,无论开发者账号上是否存在可用的配置文件都会重新生成一个。
3、–skip_install true时只下载配置文件,不安装。一定要安装才能打包,也就是必须要设置为false。
fastlane-gym用法:
查看官方使用帮助:
根据官方使用帮助编写代码:
踩坑:
1、xcode8以后--xcargs
项中需要增加PROVISIONING_PROFILE_SPECIFIER='${provisionProfileSpecifier}'
2、当CODE_SIGNING_IDENTITY字符串中有特殊符号时,如:iPhone Distribution: YUYAO PEOPLE'S HOSPITAL OF ZHEJIANG PROVINCE (xxxxx)
,无论是否对CODE_SIGNING_IDENTITY进行特殊字符转义都编译不成功。
a、使用非转义的CODE_SIGNING_IDENTITY:iPhone Distribution: YUYAO PEOPLE'S HOSPITAL OF ZHEJIANG PROVINCE (xxxxx)
编译如下:
b、使用转义的CODE_SIGNING_IDENTITY:iPhone\ Distribution:\ YUYAO\ PEOPLE\'S\ HOSPITAL\ OF\ ZHEJIANG\ PROVINCE\ \(xxxxx\)
编译如下:
c、最终解决,去掉--xcargs
中的CODE_SIGNING_IDENTITY项。
编译如下:
正常编译且签名成功!
fastlane-deliver用法:
fastlane-pilot用法:
最后附上整个CI工程的截图:
OCR之Tesseract Training
http://www.jianshu.com/p/ac4c4536ca3e
http://www.jianshu.com/p/016e55c25521
http://khalsa.guru/posts/16
https://ryanfb.github.io/etc/2014/11/19/installing_tesseract_training_tools_on_mac_os_x.html
https://blogs.wcode.org/2014/10/howto-install-build-and-use-opencv-macosx-10-10/
https://segmentfault.com/a/1190000003742411
OCR之Tesseract安装和使用
OCR(Optical Character Recognition):光学字符识别,是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字和版面信息的过程。
Tesseract:Google开源的OCR识别引擎。现已托管在GitHub上,大家有兴趣可以上Github上Star或Frok该项目。
Tesseract在Mac OSX上安装:
以上图片显示的是使用brew安装所有语言包,如果想要安装指定的语言包则命令如下:
通过brew安装所在的路径如下:
官方文档给出了两种方式安装:
方式1、通过Tesseract已经提供的编译好的二进制安装包。
方式2、通过Tesseract提供的源码自行编译安装。
你可以使用二进制安装包方式安装也可以使用编译源码方式安装。
在Mac OSX系统上,方式1安装又可通过以下两种工具进行安装:
1、MacPorts安装
2、Homebrew安装
命令行使用:
1、查看安装的版本号$ tesseract --version
2、查看安装的语言包$ tesseract --list-langs
3、图片识别命令
第一个参数是待识别的图像的文件名。
第二个参数用于指定输出,如果希望直接输出而不是保存到文件,那么就使用 stdout,否则这个参数将会作为保存结果的文件的前缀。
-l chi_sim 用来指定使用哪个 “语言文件”,如果是使用 英文(eng) ,这个参数可以不加,因为默认就是使用英文的 “语言文件” 来进行识别。
以上命令就将/Users/yuntai01/Desktop/TesseractResult/xxx.png图片使用中文语言包进行识别,并将的结果输出到/Users/yuntai01/Desktop/TesseractResult/result.txt中。
如果直接输出则只需将输出参数设置为stdout
即可:
例如识别下图:
指定多语言,用+
号相连:
4、更多用法请移步到查看使用帮助命令$ tesseract --help
5、额外参数
通过上图help命令注意到命令tesseract imagename|stdin outputbase|stdout [options...] [configfile...]
中[options...]
除了参数-l LANG
还有其他几个参数可以设置。
--psm NUM
参数:
--oem NUM
参数:
-c VAR=VALUE
参数:
具体参数可以通过tesseract --print-parameters
查看。
参数的使用有两种方式:
方式1:-c VAR=VALUE
使用 -c 选项来设定单项参数的值,比如:tesseract xxx.png xxx -l chi_sim -c language_model_ngram_on=1
允许使用多个 -c 选项来设置多个参数的值。
方式2:[configfile...]
将多项参数设置写入文件,然后在识别时使用该文件,比如:
tesseract xxx.png xxx -l chi_sim tess.conf
需要注意的是,如果使用配置文件,用作参数的配置文件名要放在最后面——这里也支持多个配置文件,但它们必须要在最后面。假如我有两个配置文件 tess_1.conf 和 tess_2.conf,那么这样是正确的:tesseract xxx.png xxx -l chi_sim tess_1.conf tess_2.conf
而这样则是错误的:tesseract xxx.png xxx tess_1.conf -l chi_sim tess_2.conf
这里提供了部分参数的用处说明。
官方文档也提供了,不过需要花点时间去找。
参考:
https://github.com/tesseract-ocr/tesseract
SonarQube应用之Objective-c
前面章节提到SonarQube支持的语言多达20+种,对这些语言的支持都是通过插件(plugin)形式,前面章节介绍了怎么通过SonarQube安装官方支持的一些语言(Java、JavaScript、PHP)的插件,但是对于Swift和Objective-c语言的插件需要licence才能使用,价格不菲,例如SonarCFamily插件就需要$5000/year。不过网上也已经有开源的能够支持Swift或者Objective-c语言的插件。
1、sonar-scanner(低版本也可以使用sonar-runner)
2、xcpretty
3、OCLint(SwiftLint支持Swift)
4、slather
5、lizard
6、gcovr
1、sonar-scanner安装:
sonar-scanner是sonarQube默认的分析启动器。
安装如下:
2、xcpretty安装:
xcpretty是为xcodebuild命令提供的附加功能,可以对整个编译构建过程中产生的日志进行统计,并生成格式化报表。
项目地址:https://github.com/supermarin/xcpretty
由于我们自己的搭建的自动化构建工具是基于fastlane搭建的,fastlane对xcodebuild编译过程中产生的日志格式化输出已经非常出色了。
3、OCLint安装:
OCLint是一个主要针对c、c++、Objective-c的静态代码分析工具
项目地址:https://github.com/oclint/oclint
4、slather安装:
slather是为Xcode项目生成测试覆盖率报告并将其挂接到CI中。是统计测试覆盖率的工具,可以生成报告日志和静态网页报表对测试覆盖率进行分析。
项目地址:https://github.com/SlatherOrg/slather$ gem install slather
5、lizard安装:
lizard是一个代码复杂度分析工具。
项目地址:https://github.com/terryyin/lizard
6、gcover安装:
gcover是代码覆盖率分析工具。
项目地址:http://gcovr.com$ brew install gcovr
关于代码覆盖率工具以后可以专门用一章节来说道说道。
CodeCoverage:苹果将其作为Xcode7的一个特性集成进去了。
详情请见
XcodeCoverage:https://github.com/jonreid/XcodeCoverage
7、FauxPas安装:
项目地址:http://fauxpasapp.com
破解地址:http://xclient.info/s/fauxpas.html
FauxPas并不仅仅着眼于你的代码,它可以检测Xcode项目中的所有元素存在的潜在问题。
参考:
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
http://oai4nfrij.bkt.clouddn.com/OCLint.html
https://www.ibm.com/developerworks/cn/java/j-lo-sonar/
http://www.jianshu.com/p/f58e89573d33
http://www.infoq.com/cn/articles/effective-code-reviews?utm_source=infoq_en&utm_medium=link_on_en_item&utm_campaign=item_in_other_langs
https://www.ibm.com/developerworks/cn/opensource/os-sonarqube/
https://github.com/Backelite/sonar-objective-c
https://github.com/oclint/oclint
http://www.jianshu.com/p/9ae446d76271
SonarQube自动化代码审查工具搭建
邂逅SoarQube:
1、人工代码审查费时费力。
2、美国老是使用拖拽式声呐(sonar)在中国周边海域窥视。
3、SonarQube开源且自搭环境,可自由掌控。
以上有点牵强,不管怎么说,反正现在已经选择了SonarQube,就用好它吧。😊
SonarQube是一个开源的代码质量管理系统,与当今众多的代码质量管理工具相比,SonarQube更具有特色和竞争力,其优势主要体现为:它是一个开源的代码质量管理系统,支持 25+ 种语言,可以通过使用插件机制与 eclipse 和 JIRA 等其他外部工具集成,从而实现了对代码的质量的全面自动化分析和管理。
SonarQube的主要特性:
1、通过插件扩展
支持新的编程语言、添加规则引擎、计算更复杂的度量指标,这些都可以借助强大的插件扩展机制。目前已经有超过50个插件可用。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。
2、支持多种编程语言
借助插件,目前已经支持超过25+种的编程语言,包括:Java,C#, C/C++, PL/SQL, Cobol, ABAP, Objective-C等。
3、集成CI
同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用Sonar
4、围绕着代码质量
SonarQube是一个Web应用程序(B/S)。规则、警告、例外、设置……都可以在线配置。通过自己的数据库,SonarQube不仅仅是展示各项指标的综合结果,同时也结合历史质量数据。
5、国际化
Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
SonarQube的主要作用:
通过sonar可以有效检测以下在程序开发过程中的七大问题:
Developers’ Seven Deadly Sins
1、潜在的bug(Bugs and Potential Bugs)
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug。
2、违反代码标准(Coding Standards Breach)
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
3、重复代码(Duplications)
显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方。
4、单元测试缺失(Lack of Unit Tests)
sonar可以很方便地统计并展示单元测试覆盖率。
5、糟糕的复杂度分布(Bad Distribution of Complexity)
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
6、糟糕的设计(Spaghetti Design)
通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系。
通过sonar可以检测自定义的架构规则。
通过sonar可以管理第三方库。
通过sonar可以利用LCOM4检测单个任务规则的应用情况。
通过sonar检测耦合。
7、缺乏足够多的注释(Not Enough or Too Many Comments)
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降,而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
SonarQube架构以及集成工作流:
详情请参考:https://docs.sonarqube.org/display/SONAR/Architecture+and+Integration
SonarQube安装:
安装前置条件:
更多详情请参考:https://docs.sonarqube.org/display/SONAR/Requirements
安装JDK:
过去Mac上的Java都是由Apple自己提供,只支持到Java 6,并且OSX 10.7开始系统并不自带(而是可选安装)(原自带的是1.6)。后来Apple加入OpenJDK继续支持 Java 6,而 Java 7 将由Oracle负责提供。
在终端中输入java -version可查看当前JDK版本信息,如果还没安装任一JDK,就会提示安装,点击后会跳到oralce java的下载网页。
安装包(注意都是下载mac下的dmg安装包):
JDK 1.6:http://support.apple.com/kb/DL1572
JDK 1.7&1.8:http://www.oracle.com/technetwork/java/javase/downloads/index.html
安装:
双击dmg安装包即可安装。
最终安装目录(版本号根据情况略有不同):
JDK 1.6:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk
JDK 1.7&1.8:
/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk
MAC下安装多版本JDK和切换几种方式:
通过.bash_profile
修改Java环境变量。
安装MySQL:
方式一:使用安装包安装
下载地址:https://downloads.mysql.com/archives/community/
双击安装
一路向下,记得保存最后弹出框中的密码(它是你mysql root账号的密码)
安装成功还需要额外配置一下:
1、进入系统偏好设置,点击mysql
2、开启mysql服务
3、配置mysql环境变量
在命令行输入mysql -uroot -p
命令会提示没有commod not found,此时还需要将mysql加入系统环境变量。
设置完成后需要使bash_profile
生效:命令行输入source ~/.bash_profile。
通过mysql -uroot -p登录mysql了,会让你输入密码,密码就是上图显示的账号密码。
登录成功后,你可以通过下面的命令修改密码:
我的mysql密码已经修改为:12345678
此时登录mysql如下图:
方式二:使用homebrew安装mysql(未完待续)
安装SonarQube:
方式一:使用homebrew安装:
正确启动SonarQube姿势:
通过homebrew安装程序可以同时在usr/local/Cellar或者usr/local/opt内找到,通过实践证明,opt中的包只是Cellar中的引用,包的真正的物理存放地址应该是Cellar。这一点其实对我们没有什么影响,想要表明的是:如果修改包的内部一些配置文件,在这两个地方找到修改是一样的。
现在我们要来找到sonar.properties,修改port端口,如下所示:
完成以上修改,并正确启动SonarQube,在浏览器中输入:localhost:9999就可以打开SonarQube Server,如下图所示:
上图是未登录状态,登录账号和密码也可以通过sonar.properties修改,SonarQube默认的账号和密码为:admin、admin。
下面开始安装SonarQube插件,到本文截止时间,SonarQube支持58种插件。
参考:
https://www.sonarqube.org
https://docs.sonarqube.org/display/HOME/SonarQube+Platform
CLI
CLI(全称:command-line interface,中文名:命令行界面)
在Mac上安装各种程序时,除了直接使用GUI(图形用户界面)方式安装外,更方便的莫过于通过CLI来安装各种程序。
由于本人从事技术方向不同,导致接触的这些CLI也不是很多,接触较多是brew、npm、gem等。
homebrew(常用软件)
gem(ruby软件)
npm(node.js软件)
1、RVM
以前在搭建某个环境时,按照官方文档打开Terminal吧嗒吧嗒各种命令敲一遍,很愉快的安装完毕。当需要改动某个程序的配置文件时一下傻眼了,
完全分不清之前敲的那些命令是干啥的,安装的这些包都放到哪里去了。
i) RVM:
上面提到gem,那就不得不说说RVM,RVM(Ruby Version Manager),用于安装Ruby环境,管理多个Ruby环境。
RVM安装:$ curl -sSL https://get.rvm.io | bash -s stable
RVM罗列出Ruby版本列表:
RVM安装Ruby版本:$ rvm install 2.3.0
RVM切换已经安装的Ruby环境:
ii) gem:
RubyGems是一个方便而强大的Ruby程序包管理器(使用Ruby开发出来的程序包被称为gems)。
gem是RubyGems管理gems包的命令。
gem无需单独安装,当Ruby环境安装完成时,RubyGems一般也安装了,直接使用gem命令即可。
通过gem命令安装ruby程序:
罗列出gem安装的Ruby程序:
查看当前Ruby环境版本:
更新已安装的Ruby程序:$ gem update cocoapods
有时候明明提示安装的Ruby程序有新的版本时,但是通过gem update命令去更新时,它就是提示“Nothing to update”,如下所示:
此时可以查看自己的gem源,更换其他gem源尝试一下。
可用的源有如下:
https://rubygems.org/
https://gems.github.com
https://gems.rubyforge.org
https://ruby.taobao.org关于gem source的常用命令:
gem sources 显示当前使用的源
sources gem sources -a url地址 添加一个源
sources gem sources -r url地址 删除一个源
source cache gem sources -u 更新
2、NVM
通过上面的RVM与gem的介绍,想必对于NVM与npm之间的关系已经清晰明了了吧。
NVM(Node Version Manager)用于安装Node.js环境,管理多个Node.js版本。
npm(Node Package Manager)是Node包管理器,我们可以通过npm命令安装别人写好的模块。
NVM安装:
NVM安装有两种方式
方式一:通过Homebrew$ brew install nvm
这种方式安装完后,为了可以直接在shell中使用nvm指令,还需要如下几个步骤:
步骤一:$ mkdir ~/.nvm
步骤二:需要在“.bash_profile”文件中增加以下环境变量:$ export NVM_DIR=~/.nvm
步骤三:需要在“.bash_profile”文件中增加以下环境变量:source $(brew --prefix nvm)/nvm.sh
或者无需打开“.bash_profile”文件,直接通过echo命令设置$ echo "source $(brew --prefix nvm)/nvm.sh" >> .bash_profile
此时需要通过如下命令重新source文件“.bash_profile”设定生效:$ . ~/.bash_profile
或者 source ~/.bash_profile
备注:
1、“.bash_profile”路径:/Users/yuntai01/.bash_profile
。
2、习惯把设置放在.bashrc的可以将放在.bash_profile下的配置放到.bashrc下,如果没有.bashrc这个文件,可以touch创建。
3、在shell中使用nvm指令,也可以不用在“.bash_profile”文件中增加以上环境变量,麻烦点在于每次需要手动在终端(Terminal.app)中输入以下命令:$ . $(brew --prefix nvm)/nvm.sh 或者 source $(brew --prefix nvm)/nvm.sh
方式二:curl安装方式$ curl https://raw.github.com/creationix/nvm/master/install.sh | sh
由于方式二本人未验证,请参考:(http://www.imooc.com/article/14617)
NVM安装Node:
查看Nodejs版本:$ nvm ls-remote
安装指定版本:$ nvm install 7.1.0
安装最新版本:$ nvm install stable
通过npm安装Node.js包:
罗列出npm安装的Node程序:
参考:
https://www.npmjs.com/package/npm
http://www.ruanyifeng.com/blog/2016/01/npm-install.html