1 文檔背景
現在以操作系統為Linux,名為Luna的android項目為例進行練習,將在CI在整個項目中所做的事情以學習筆記的形式做以下總結。
1.1對Luna的簡單介紹
Luna項目由四個team來完成。整個項目分為四個部分:PrintCast , PhotoCreate, Snapfish, Facebook四個部分,現將CI在各個部分所作工作進行總結。
1.2項目開始前的軟件準備
軟件名稱 | 版本信息 | 源代碼下載地址 |
Apache | Httpd-2.2.14 | http://httpd.apache.org |
Subversion | subversion-1.6.6.tar.gz | http://subversion.tigris.org |
Cruisecontrol | cruisecontrol-bin-2.8.2.zip | http://cruisecontrol.sourceforge.net |
Android-SDK | android-sdk-1.5_r3-linux-x86.zip | http://developer.android.com/sdk/1.5_r3/index.html |
Ant | apache‐ant‐1.7.1‐bin.tar.bz2 | http://ant.apache.org |
Svnant | sqlite-amalgamation-3.6.13.tar.gz | http://subclipse.tigris.org/svnant.html |
neon | neon-0.28.4.tar.tar | 可根據安裝提示獲取 |
sqlite | sqlite-amalgamation-3.6.13.tar.gz | 可根據安裝提示獲取 |
說明:Apache 是用來作為服務器的,Subverion,Cruisecontrol,Ant,svnant是版本控件工具,而java_jdk,eclipse,Android-SDK是工程項目所需。
2 軟件安裝及相關操作
2.1Apache
2.1.1安裝apache
解壓httpd-2.2.14.tar.gz,用tar –zxvf
配置用以下命令:
./configure –prefix=/usr/local/apache –enable-so –enable-proxy –enable-ssl –enable-vhost-alias –enable-mods-shared=most –enable-dav –enable-maintainer-mode-with-mpm=worker
說明:-prefix=/usr/local/apache 指定把apache安裝到/usr/local/ 目錄下,並命名為apache,這是apache的路徑的名字,所以並不是絕對的,你可以根據自己的喜好而定,一般安裝在自己比較熟悉而又容易找到的地方比較好。
在ubuntu9.3中,該配置不適用。主要是因為譔配置中有-enable-ssl,而ubuntu中並沒有默認安裝ssl。你需要認真閱讀錯誤提示,按提示進行相關操作。
-enable-dav 與 –enable-maintainer-mode 是為了能在apache 下集成subversion 才加入的編譯參數
這段配置夠長,不知道首先配置apache的人,是如何知道的,我反覆寫了兩三次,有了大致的印象,但要說能真正記得,那還差得遠咧。
編譯 make
安裝 make install
說明:./configure 是用來檢查所要安裝的平台的特征,這一步會生成Makefile文件。可以加:-with,-without,-enable,-disable等參數對編譯進行控制,相關內容可參考./configure –help.
Make是用來編譯的,它從Makefile中讀取指令,然後編譯。大多數源代碼都是在這一步進行編譯的,如果出錯,就不要再進行下一步的安裝了。
Make install 是用來安裝的,它也從Makefile中讀取指令,安裝到指定位置。這一步只需要有擁有root權限即可。
Makefile文件存在於apache的安裝目錄中,可自行查看其內容。
清理源代碼目錄 make clean (這一步主要是為了節約資源,我認為可有可無)
說明:
如果在安裝過程中提示沒有neon與sqlite,可以根據提示的信息從相應位置下載安裝包,然後通過tar –zxvf xxxx
不過,我認為這種情況只是對其中聽某一版本而言,並不是所有的版本都是如此。事實上在fedora 9.3版本中,不需要neon和sqlite.因為該系統會默認安裝一個mysql5.0.1.而在安裝subversion的時候,也會很順利。
在apache安裝目錄下bin/apachectl start 可啟動apache
2.1.2關於apache的配置
編輯apache的配置文件/conf/httpd.conf
在AddType application/x-tar.tgz下面加
AddType application/x-httpd-php.php
在本文件中,找到DirectoryIndex index.html index.html.var
在其後加index.php,讓它把index.php作為默認頁
找到User,Group 模塊,修改用戶名和組名。
找到ServerName把後面的IP改成你自己的IP
找到DocumentRoot “/usr/local/apache2/htdocs”,你便知道你存放網頁文件的路徑。
找到AddDefaultCharset iso8859-1,把iso8859-1改為gb2312或者直接刪除掉。
2.1.3Apache的相關操作
²
²
²
²
2.2 subversion
2.2.1安裝subversion
解壓 subversion1.6.6.tar.gz,用 tar
配置
./configure -prefix=/home/build/svn1.6 -enable-maintainer-mode -with-apr=/usr/local/ apache/bin/apr-1-config -with-apr-util=/usr/local/ apache2/bin/apu-1-config
說明:/usr/local/apache就是apache的安裝目錄
編譯
安裝 make install
清理源代碼目錄 make clean
注意:同安裝Apache一樣,你需要認真閱讀各個步驟的信息,認真看看自己是否安裝成功。不要以為有了這個文檔,你是按文檔一步一步來的,就不去看一些信息,以後OK,卻不知道為什麼下一步執行不了。因為電腦配置,系統版本,軟件的安裝等各種原因會導致你不能死照這個步驟來安裝,遇到問題,請相信自己,認真閱讀提示信息,並按提示信息來找出錯誤的原因。
2.3CruiseControl
2.3.1安裝Cruisecontrol
就我個人觀點來說,Cruisecontrol工具算是一個免安裝的程序。重心在於解壓,並沒有所謂的真正意義上的安裝。
首先創建Cruisecontrol所要安裝的地方,如:/home/build
cd
當然你也可以安裝在其它你覺得方便,可行的地方
解壓cruisecontrol-bin-2.8.2.zip 用unzip
cd cruisecontrol-bin-2.8.2/projects
mkdir Luna(Luan為android項目名稱)
Cruisecontrol下面默認有projects這個文件夾,我認為它是用來管理各種projects的,這便是我認為Cruisecontrol是工具的主要原因之一。
Cruisecontrol對projects的管理主要是通過config.xml來進行配置的。而config.xmlE:\build.xml主要是對project進行配置的,當然你也可以在這個xml文件中加入多個projects。
2.4Ant
2.4.1安裝Ant
Ant是在build過程中的主要工具之一。對於我做的這個練習來說,我個人認為如果沒有Ant,所有的工作都無法繼續。
cd Luna
在此解壓apache‐ant‐1.7.1‐bin.tar.bz2
2.4.2Ant的配置
vim
說明:.bash_profilec對Linux來說,是一個具有特殊意義的文件。它一般位於主目錄下面。如果說在主目錄下面找不到的話,你就要到 /etc/profile 去看看有沒有相關的內容。當然這些東西也不一定是絕對的,需要論情況而定,所以請你保持清醒,不要犯一些些小而簡單的錯誤。
如果你看到.bash_profile文件,你就會發現它是對一些環境的配置。如果你要對它進行修改。建議先做備份工作,一般不要刪除它裡面原有的內容,直接在它的文件尾部加上你所要添加的內容即可。
Add the following lines to the file,substituting the directory where you installed Ant:
ANT_HOME=~/Luna/apache-ant-1.7.1
JAVA_HOME=/opt/jdk1.5.0_21/
PATH=$PATH:$HOME/bin:~/Foxconn/apache-ant-1.7.1/bin: /opt/jdk1.5.0_21/bin
Export PATH ANT_HOME JAVA_HOME
在以上內容添加之後,修改後的文件並不會立即生效。你需要re_read 一下,你可以退出並重新登陸使修改後的文件生效,或者使用以下命令使之生效。
Source ~/.bash_profile
對於apache-ant來說,我們平時主要操作的是其腳本build.xml文件
2.5Android-SDK
2.5.1安裝 Android-SDK
因為Luna project是一個Android的工程,所以需要安裝相應的SDK才行。
而我個人認為Android-SDK也是一個只需要解壓便安裝成功的軟件。
以下操作是在 Luna的目錄下進行的:
解壓android-sdk-1.5_r3-linux-x86.zip 用unzip android-sdk-1.5_r3-linux-x86.zip 命令
Move android-sdk-1.5_r3-linux-x86 android-sdk 這一步沒有什麼特別的作用,主要是想讓SDK的文件名簡單一些,在進行一些相關的配置的時候,不會因為文件名太復雜而出錯。
2.5.2Android-SDK配置
Modify anroid-sdk\platforms\android-1.5\tools\dx
Add the following lines to the file dx
dx文件是對項目的一些配置文件,一般情況下,一般情況下,我們都不會修改它。但隨著項目的需要,我們需要對javaOpts項的值進行相應的修改,如果你有看到這個文件的內容,看到javaOpts這項內容,也許你已經知道它的作用了。沒錯,我從表面上看覺得它就是用來對內存進行設置項。
2.6svnant
2.6.1安裝svnant
安裝svnant是整個項目中最簡單的工作。只需要解壓,不需要任何配置與修改。
cd /home/build/cruisecontrol-bin-2.8.2
unzip svnant-1.3.0zip
說明:Ant與svnant的區別:
Ant是跟apache配套使用的,主要用於build過程中的一些命令
而 svnant主要與subversion共同使用,記錄項目過程中的一些變更等信息。
2.7Mysql
2.7.1Mysql的安裝
在一些Linux系統中,會默認安裝Mysql軟件。所以你在安裝Mysql的過程中,可能會遇到沖突問題。為了防止這種問題的發生,建議在安裝Mysql前,首先查看本機上是否裝有Mysql的版本。如果有,刪除後再安裝。
安裝Mysql需要安裝三個軟件,分別是:MySQL-server-community-5.1.33-0.rhel5.i386.rpm, 這是Mysqlr的服務器文件的安裝。MySQL-client-community-5.1.33-0.rhel5.i386.rpm, 這是Mysql客戶端文件的安裝。MySQL-devel-community-5.1.34-0.rhel5.i386.rpm,這是Mysql頭文件的安裝。
至於這三個文件有什麼區別?我還不太清楚。
安裝部分:rpm –ivh MySQL-server-community-5.1.33-0.rhel5.i386.rpm
此時服務器端已經安裝完畢,測試是否成功用netstat -nat看Mysql商品是否打開,如果打開,表示服務已經啟動,安裝成功。Mysql的默認端口是3306.
其它兩個也按同樣的命令來安裝即可
2.7.2修改登陸密碼
Mysql默認沒有密碼,安裝完畢需加密碼。
命令格式:mysqladmin –u 用戶名 –p 舊密碼 password 新密碼
如:mysqladmin –u root password 123456(因為開始時root沒有密碼,所以在此沒有舊密碼,舊密碼就省略了,如果有舊密碼,剛需要加上舊密碼)
測試是否修改成功
用命令mysql
如果顯示錯誤,說明密碼已經修改。
當然你也可以用新密碼去試,看是否修改成功。
2.7.3Mysql的啟動與停止
啟動 Mysql
安裝完成後啟動文件mysql位於/etc/init.d目錄下,如需要啟動mysql,只需要運行下面命令即可 /etc/init.d/mysql start
注意;執行該命令的過程中,可能會出現錯誤信息: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)。你去查看/var/lib/mysql下面的內容,卻發現並沒有mysql.sock的文件。這主要原因是,/var/lib/mysql的訪問權限問題。解決方法如下:
執行:chown –R mysql:mysql /var/lib/mysql即可
然後再啟動mysql.服務器正常啟動後察看/var/lib/mysql自動有生成mysql.sock文件。
停止 Mysql
用命令 /usr/bin/mysqladmin –u root –p shutdown
這些並不是絕對的,需要考慮到各種情況,你需要根據具體情況來作具體的分析。
2.7.4Mysql的基本操作
1)
2)
Insert into user(host,user,password) values(‘%’,’remote’,password(‘remoteadmin’));
Grant all privileges on *.* to remoteadmin@’ %’ identified by ‘remoteadmin’;
3)
如果在mysql中不能創建數據庫,給出沒有權限進行操作的提示,解決方案如下:
2.8PHP
2.8.1PHP簡單介紹
PHP主要是用於服務端的腳本程序,因此可以用PHP來完成任何其它的CGI程序能夠完成的工作,如:收集表單數據,生成動態網頁,或者發送/接收cookies.但php的功能遠不局限於此。
PHP腳本主要用於以下三個領域:
服務端腳本。這是PHP最主要的目標領域。開展這項工作需要具備三點:PHP解析器(CGI 或者服務器模塊),WEB服務器和WEB瀏覽器。在運行WEB服務器時,安裝並配置PHP,可用WEB瀏覽器來訪問PHP程序的輸出,即瀏覽服務端的PHP頁面。
命令行腳本。只需要用PHP解析器來執行一段PHP腳本。如果你安裝過wiki或者discuz,你就能發現裡面有大量文件是php文件。
編寫客戶端的GUI應用程序。可以在客戶端的應用程序中使用PHP的一些高級特性,用PHP-GTK來編寫跨平台的應用程序。
2.8.2安裝PHP
首先要停止apache
在apache的安裝目錄下,進入bin文件中,可以看到apachectl 的文件。
執行命令:apachectl stop
2)配置 ./configure --with-mysql --with-apxs2={apache的安裝目錄}/bin/apxs
注意:apache的安裝目錄與源代碼目錄的區別
3)make(編譯)
4)make install(安裝)
5)make clean(清理源代碼目錄)
6)Setup php.ini
把php.ini-dist拷備到/usr/local/lib下, 並命名為php.ini
7)設置apache解析 *.php文件
注意:如果你在編譯php時,遇到錯誤:gcc:/usr/lib/mysql/libmysqlclient.so:No such file or directory
使用ln –s/usr/lib/libmysqlclient.so /user/lib/mysql/libmysqlclient.so,然後重新編譯php.
在apache的安裝目錄下,找到DirectoryIndex index.html index.html.var後面加入以下文字:index.php,即把php文件作為默認啟動文件。
編輯conf/httpd.conf文件
找到#AddType application/x-gzip .tgz的模塊
在此模塊後加入一行:AddType application/x-httpd-php.php
到此,配置完成,apache就可以解釋php文件了
8)啟動apache
在apache的安裝目錄的bin目錄下,執行 apachectl start即可
3 創建項目
Cd
編寫build code 的shell 腳本
修改apache/bin 下面的httpd 文件
修改示例1 Anonymout access
<Location /svn>
DAV svn
SVNPath {/path/to/repos}
AuthsSVNAccessFile{/path/to/access/file}
</Location>
修改示例2:Mixed anonymous and authenticated access
<Location /svn>
DAV svn
SVNPath {path/to/repos}
AuthType Basic
AuthUserFile {“Authentication Realm”}
AuthzSVNAccessFile {/path/to/access/file}
Satisfy Any
Require valid-user
</Location>
sqlite-amalgamation-3.6.13.tar.gz 是用作數據庫連接的,無需安裝,只要把它解壓到Apache的目錄下即可。
cruisecontrol-bin-2.8.2.zip 是整個項目能夠build的基礎
neon-0.28.4.tar.tar目前我還不知道它主要是用來做什麼的。
我認為sqlite ,neon都相當於插件的形式,它們兩個都不需要安裝。但是在安裝Apache的時候,會因為沒有這個兩文件夾的內容,而出現錯誤的情況。
對於以後軟件包,以.tar.gz結尾的,可以用tar –zvxf 文件名來解壓,而對於cruisecontrol-bin-2.8.2.zip 剛要用unzip來解壓。
在/cruisecontrol-bin-2.8.2目錄下面,config.xml是用來對項目進行配置的。
4 項目階段
在cruisecontrol-bin-2.8.2/projects/目錄下,
新建Lunar項目的src文件夾,並Check out服務器上的項目,用svn co svn://10.141.26.50/Luna/branches/Application, svn co svn://10.141.26.50/Luna/branches/Service.來check out 整個項目。
這時,你會在當前路徑下,看到Luna的文件。
在Luna文件下,首先導入anroid-sdk,pache-ant-1.7.1,新建build.xml文件,buildTools ,buildRelTools文件夾,其中buildTools與buildRelTools是用來存放Ant的build的工具的。
build.xml
我個人認為,它是ant命令的引導文件,如果沒有build.xml文件,ant命令就不會執行。至於為什麼,我還不太清楚。我覺得可能根ant與java的關係有關吧。所以只要你要執行有關Ant的命令,就必須有build.xml的存在,如果沒有就不能執行。E:\build.xml
buildTools和buildRelTool雖功能不一樣,但裡面的工具有一一對應的相似關係。唯一不同的是buildRelTool裡面多了一個Luna.Keystore的文件。
buildTools工具,我認為主要是在debug的時候用的,也就是說在執行ant debug時會調用這些工作去工作。
buildTools
buildRelTools
同builTools有極大的相似之處,唯它主要是在release的時候用的,即執行ant release時會調用buildRelTools的工具,到最後你能看到最一些release的結果,這都歸功於buildRelTools.
batch_build_rel.sh 主要功能:1.Import environment variables 即sh_rel_env 文件2.Import build time
sh_rel_env 主要功能:Define the environment variables(BUILD_ROOT,TOOLS_ROOT,ANT,TARGET,JAVA_HOME)
copy_rel_result.sh 主要功能:1.Import environment variables 2.add the apk files to TARGET one by one 3.copy the private private key
Makefile 主要功能:1.Application bundle list 2.All modules will be built 3.prepare 4. install 5.clean
rel_build_env.sh 主要功能:1.The Global parameters definitions for Makefile (Root path) 2. define the ANT path 3. build nformation
當然還可能有一些其它的作用,由於能力的原因,我還沒有發現或者目前我還不知道的。
Luna.keystore 主要功能:用於加密文件,生成apk文件的時候,需要用它進行使用。因為它僅存在於buildRelTools中,所以也只在buildRelTools的copy_rel_result.sh中用以下語句來進行調用:
$JAVA_HOME/bin/jarsigner -verbose -keystore Luna.keystore -storepass 123456 -signedjar PhotoCreate.apk PhotoCreate-unsigned.apk Luna
說明:這句話便是對apk進行jarsigner,這中間存在一個簽名的過程。正是這句話,讓PhotoCreate-unsigned.apk文件變成了PhotoCreate.apk
關於keystore文件的生成
在JAVA_HOME的bin目錄下,可用以下命令生成keystore文件:
keytool –genkey –alias Luna –keyalg RSA –validity 2000 –keystore Luna.keystore
說明:keytool是生成keystore文件的工具,具體用法可用keytool –help查看。
Luna是.keystore文件的別名。2000是.keystore文件有效的天數。Luna.keystore是.keystore文件的真正的文件名。輸入命令後,按提示一步步輸入相關信息即可。