1. Jenkins环境安装
在官网下载Jenkins, 地址是: http://jenkins-ci.org/content/thank-you-downloading-os-x-installer
当前最新安装包为:jenkins-1.526.pkg.
直接点击安装完成,完成后会在application下产生一个jenkins的文件夹, 自动启动safari,并进入Jenkins页面。
**也可以下载jenkins.war, 然后运行java -jar jenkins.war,进行安装。
【问题1】安装完成,自动启动safari,但进入localhost失败,提示无法访问localhost。
【A】检查Java环境是否安装好;若java环境未安装好,重新安装配置java环境。
2. 运行Jenkins
http://localhost:8080
就可以进入jenkins的主界面。
如果安装完成后出现启动不了的情况,执行以下命令,清除下既存的plist信息:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist sudo mkdir -p /Users/Shared/Jenkins/Home sudo chown -R daemon /Users/Shared/Jenkins sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
【注】直接在浏览器运行localhost启动jenkie,会导致一些问题,比如用Xcode去build的时候,会有code signin 的问题,导致在终端能编译通过的脚本,在Jenkie下无法通过。
而出现这个问题的原因在于用户权限问题,用浏览器运行启动jenkie,jenkie的工作目录会建立在/Users/Shared/Jenkins下,导致它没有权限访问系统的keychains,需要通过一系列的步骤去给予它这个权限。
具体过程参见: http://stackoverflow.com/questions/9245149/jenkins-on-os-x-xcodebuild-gives-code-sign-error
正确的启动方式是:
sudo launchctl unload /Library/LaunchDaemaons/org.jenkins-ci.plist
java -jar /Applications/Jenkins/jenkins.war --httpPort=8080
这时,jenkies会在/Users/[user name]/.jenkins 下面建立工作目录,从而它就有权限去获取相关的keychain。
3. Jenkins配置
(1) Xcode插件安装
Manage Jenkins->Manage Plugins->add Xcode Plugin "Xcode Integration"
(2)新建Job
a. New Job -> Job Name->free-style software project->OK
b.进入Subversion->输入SVN地址,并验证;
C.在Build设置中选择Xcode,并设置;在实际项目中,都是用脚本实现。
4. XCode插件配置
a. 在“Add Build Step”选项中选择Xcode;
b. 配置build环境:
Target:写入Project中对应的Target,比如“Helloworld”
SDK:可以为空,或iPhoneSimulator4.1.sdk等;
Configuration: 设置build的模式,Debug,Release等等;
Xcode Workspace File:设置workspace的文件名;
Xcode Project Directory:设置工程文件对应的路径,工程文件不一定在系统根目录下;
Xcode Project File:Helloworld.xcodeproj,对应的工程文件名。
Build output directory: build结果输出的路径。
Build IPA? :是否需要build ipa文件;
Unlock Keychain? :Jenkins需要访问Keychain,获取响应的key,所以需要授权。选上就自动解锁。需要提供密码。
设置完成之后,保存即可。
可以通过控制台查看最终的配置结果,运行的命令是:
[bld] $ /usr/bin/xcodebuild -target NexGen -configuration Debug build
根据可以这个命令对比,设置的是否正确。
【问题】KeyChain无法解锁,Jenkin没有权限访问Keychain。
【A】给于Jenkins用户权限,
security <CERT_FILE> import -k $HOME/Library/Keychains/login.keychain -Tcodesign
5. Jenkins默认的邮件通知
A. 采用Jenkins默认的邮件通知,在项目配置的”Post-build Actions”选项中勾选”Email Notification”标签,并在“Recipients”中填入邮件地址即可。
但是,这样每次编译都会邮件通知,有点烦,因此可选择邮件通知的插件,更优。
B. 采用邮件通知插件
下载插件email-ext对应的*.hpi文件,拷贝到路径$JENKINS_HOME/plugins,之后需要重新启动Jenkins。
然后项目配置中,在”Post-build Actions”选项中,不选择”Email Notification”标签,而勾选”Editable Email Notification”标签。并在Global Recipient List中填入接收邮件的地址,其它默认即可。
设置完成后,编译错误才会通知对应的邮箱地址。
【设置系统邮件地址】
Jenkins->Manage Jenkins->Configure system ->Jenkins location- >System admin Email Address-> 邮件的发信人地址
【配置Extend Email Notification】
Default Recipients : 收件人地址
Default Content Type: Html
Default Content:
<font size=4>Hi WNC developer,</font> </br> </br> <font color="#0B610B" size=4>Check console output at </font> <a href="${BUILD_URL}console"> ${BUILD_URL}console </b></a> <font color="#0B610B" size=4> to view the results.</font> </br> <html> <body leftmargin="10" marginwidth="5" topmargin="8" marginheight="4" offset="4"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size:11pt; font-family:Tahoma, Arial, Helvetica, sans-serif"> </br> <tr> <td> <h2><font color="#0000FF">Build Result - ${BUILD_STATUS}</font></h2></td> </tr> <tr> <td><br/><b><font color="#0B610B">Build Information:</font></b><hr size="2" width="100%" align="center"/></td> </tr> <tr> <td> <ul> <li>Project Name - ${PROJECT_NAME}</li> <li>Build Results(For xxx) - <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li> <li>Project Url - <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> <li>Build Url - <a href="${BUILD_URL}">${BUILD_URL}</a></li> <li>SVN Revision - ${SVN_REVISION}</li> </ul> </td> </tr> <tr> <td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b><hr size="2" width="100%" align="center"/></td> </tr> <tr> <td> <ul> <li>View history changes here: - <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li> </ul> ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="Changes for Build #%n:<br/>%c<br/>", showPaths=true, changesFormat="<pre>[%a]<br/>%m</pre>", pathFormat=" %p"} </td> </tr> </br> <tr> <td><b><font color="#0B610B">Failed Test Results</font></b><hr size="2" width="100%" align="center"/></td> </tr> <tr> <td> <pre style="font-size:11pt; font-family:Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre> <br/> </td> </tr> <tr> <td> <ul> <li>Detail test result at - <a href="${BUILD_URL}/testReport">${BUILD_URL}testReport</a></li> </ul> </td> </tr> </br> <tr> <td><b><font color="#0B610B">Build Logs (last 100 lines):</font></b><hr size="2" width="100%" align="center"/></td> </tr> <tr> <td> Test Logs (if test has ran): <a href="${BUILD_URL}console">Detail Log</a> <br/><br/> </td> </tr> <tr> <td> <textarea cols="90" rows="50" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea> </td> </tr> </table> </body> </br> </br> <font size=4>Best Regards,</font> </br> <font size=4>Continous Integrate Server</font> </br> </br> </html>
【配置Email Notification】
SMTP Server: outbound.XXX.com
Default user e-mail suffix : @xxx.com
保存之后,可以测试配置是否成功,如果成功收件人会收到响应的邮件通知。
【在Mail 的advance中设置trigger】
Fail:build失败的时候发送邮件;
Success:成功的时候发送邮件。
6. 载入证书文件
环境配置完成后,直接去build now还是会出错,因为IOS的一些证书没有载入到Jenkins所在的机器中。需要把.mobileProvision文件
添加到Keychains中。操作方式为,双击打开即可。
如果显示,该provision为无效文件,则需要证书文件。即与该provision文件对应的.cer文件,或授权文件.p12.
当Keychains中的证书文件显示为valid时,再次运行Build Now,编译通过
7. Jetty 配置
配置Jetty,可以让device通过wifi安装ipa包。
1. 下载Jetty 路径为:http://dist.codehaus.org/jetty/jetty-6.1.14/jetty-6.1.14.zip
2. 解压zip包,进入Jetty的目录,运行命令:java -jar start.jar,则jetty启动成功。 需要安装Maven,在MAC环境下一般已经自带Maven
3. 进入Jetty目录下/etc/jetty.xml,修改默认端口为8081,。 8080一般为Jenkin使用。
4. 在jetty目录下webapps下建立新文件夹,命名为newJob,在newJob中添加index.html, 该html中即为设备登录jetty时显示的页面。
大致内容如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>My Cool app</title> <!-- Art Direction Styles --> </head> <body> <ul> <li><a href="itms-services://?action=download-manifest&url=http://10.140.48.168:8081/ipa/***.plist"> Install WNC Application</a></li> </ul> </body> </html>
分别将***.ipa,图片文件考入.plist中描述的地址即可。
5. Deveice上,打开浏览器,输入:http://10.140.48.168:8081/ipa/index.html 就能看到安装的链接,点击即可安装。
【Q1】安装失败,是ipa文件不对?
【A1】安装到75%左右,提示无法安装;真机连上XCode,应用程序也无法安装到真机上,提示no dictionary字样; 这是由于build的版本不对,build出来
的target是6.1,而真机是6.0版本,故无法安装。
【Q2】证书问题,使用Ios_IN_HOUSE.mobileprovision证书,build无法通过。
【A1】in_house.mobileprovision下载到本地后,双击该文件,XCode打开,会显示该证书文件是否有效。如果有效,邮件点击该证书文件,选择“Reveal Profile
in Finder”, Finder会导向XCode实际使用的证书文件(以字母数字混合命名),这个.mobileprovision文件就是build in house的时候需要使用的证书文件。
【Q3】使用build脚本去build in house的包时候,可以在XCode的工程设置中配置好in-house需要的包,然后直接运行命令:
xcodebuild -project NexGen.xcodeproj -alltargets -configuration In-House-Distribution -sdk $SDKNAME
xcodebuild -project NexGen.xcodeproj -alltargets -configuration In-House-Distribution -sdk $SDKNAME CODE_SIGN_IDENTITY="******." PROVISIONING_PROFILE="******" build