1. 程式人生 > >【CI】Jenkins環境配置

【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,需要通過一系列的步驟去給予它這個許可權。

正確的啟動方式是:

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包。

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號。