【CI】Jenkins环境配置

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>

其中***.plist为工程对应的说明文件,用XCode打开,里面有三个项:ipa的地址,应用程序对应的图片地址。

分别将***.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

**处即为证书文件对应的信息。前者为显示的名字,后者对应ID号。



你可能感兴趣的:(【CI】Jenkins环境配置)