iOS可持續(xù)集成:Jenkins + fastlane + 蒲公英

說到持續(xù)集成,那么很多人就會問,什么是可持續(xù)集成待牵?可持續(xù)集成可以為我們開發(fā)者做什么?

持續(xù)集成是一種軟件開發(fā)實踐:許多團隊頻繁地集成他們的工作喇勋,每位成員通常進行日常集成缨该,進而每天會有多種集成。每個集成會由自動的構(gòu)建(包括測試)來盡可能快地檢測錯誤川背。許多團隊發(fā)現(xiàn)這種方法可以顯著的減少集成問題并且可以使團隊開發(fā)更加快捷贰拿。

CI是一種開發(fā)實踐。實踐應(yīng)該包含3個基本模塊:

  • 自動構(gòu)建熄云、自動編譯膨更、自動分發(fā)、部署和測試缴允;
  • 代碼版本倉庫(SVN或者Git)荚守;
  • 持續(xù)集成的服務(wù)器;

通過持續(xù)集成,可以讓我們通過自動化等手段高頻率地去獲取產(chǎn)品反饋并響應(yīng)反饋的過程矗漾。接下來是iOS可持續(xù)集成的實踐锈候。

安裝fastlane

1. 查看Ruby版本,需要2.0及以上版本

$ ruby -v

2. 需要將gem的source改為:https://gems.ruby-china.com/

#查看gem的source
$ gem sources

*** CURRENT SOURCES ***

https://gems.ruby-china.com/

3. 檢查Xcode命令行工具是否安裝:

$ xcode-select --install

如果沒有安裝會進行安裝敞贡。如果已經(jīng)安裝了則會提示:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates

4. 安裝fastlane:

$ sudo gem install fastlane --verbose

如果出現(xiàn)以下錯誤:

ERROR:  While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

則在終端輸入:

$ sudo gem install -n /usr/local/bin fastlane

檢查是否安裝正確:

$ fastlane --version

5. 安裝插件

直接使用gem install貌似有問題泵琳,改用bundle安裝:

bundle install --path vendor/bundle
# 版本號
bundle exec fastlane add_plugin versioning
# 蒲公英
bundle exec fastlane add_plugin pgyer

6. Fastlane配置

在工程目錄下:

$ fastlane init

中間會讓你輸入蘋果開發(fā)者賬號的賬號和密碼,之后會在你項目工程的目錄下生成一個fastlane文件夾誊役,里面有Fastlane的配置文件虑稼,一個是Appfile文件,一個是Fastfile文件(如果要上傳AppStore的話還有Deliverfile文件)势木。Appfile保存蘋果開發(fā)者的相關(guān)信息、項目的相關(guān)信息等歌懒。Fastfile是運行腳本啦桌。
2.編輯Fastfile文件
有時候一天需要打好幾個包,為了區(qū)分及皂,我們這里實現(xiàn)一個遞增build號的功能甫男。
(1)修改項目工程配置
修改Build Settings中的Versioning配置,Current Project Version隨便填一個验烧,Versioning System選擇Apple Generic板驳。

image

(2)定義一個遞增build號的函數(shù),添加到Fastfile中

def updateProjectBuildNumber

currentTime = Time.new.strftime("%Y%m%d")
build = get_build_number()
if build.include?"#{currentTime}."
# => 為當(dāng)天版本 計算迭代版本號
lastStr = build[build.length-2..build.length-1]
lastNum = lastStr.to_i
lastNum = lastNum + 1
lastStr = lastNum.to_s
if lastNum < 10
lastStr = lastStr.insert(0,"0")
end
build = "#{currentTime}.#{lastStr}"
else
# => 非當(dāng)天版本 build 號重置
build = "#{currentTime}.01"
end
puts("*************| 更新build #{build} |*************")
# => 更改項目 build 號
increment_build_number(
build_number: "#{build}"
)
end

實現(xiàn)自動打包的完整Fastfile如下:

# 定義fastlane版本號
fastlane_version “2.46.1” 

# 定義打包平臺
default_platform :ios

def updateProjectBuildNumber

currentTime = Time.new.strftime("%Y%m%d")
build = get_build_number()
if build.include?"#{currentTime}."
# => 為當(dāng)天版本 計算迭代版本號
lastStr = build[build.length-2..build.length-1]
lastNum = lastStr.to_i
lastNum = lastNum + 1
lastStr = lastNum.to_s
if lastNum < 10
lastStr = lastStr.insert(0,"0")
end
build = "#{currentTime}.#{lastStr}"
else
# => 非當(dāng)天版本 build 號重置
build = "#{currentTime}.01"
end
puts("*************| 更新build #{build} |*************")
# => 更改項目 build 號
increment_build_number(
build_number: "#{build}"
)
end

#指定項目的scheme名稱
scheme=“TestCI”
#蒲公英api_key和user_key
api_key=“”
user_key=“”

# 任務(wù)腳本
platform :ios do
lane :development_build do|options|
branch = options[:branch]

puts “開始打development ipa”

updateProjectBuildNumber #更改項目build號

# 開始打包
gym(
#輸出的ipa名稱
output_name:”#{scheme}_#{get_build_number()}”,
# 是否清空以前的編譯信息 true:是
clean:true,
# 指定打包方式碍拆,Release 或者 Debug
configuration:"Release",
# 指定打包所使用的輸出方式若治,目前支持app-store, package, ad-hoc, enterprise, development
export_method:"development",
# 指定輸出文件夾
output_directory:"./fastlane/build",
)

puts "開始上傳蒲公英"
# 開始上傳蒲公英
pgyer(api_key: “#{api_key}”, user_key: “#{user_key}”)

end
end

注意:蒲公英的 api_key 和 user_key,開發(fā)者在自己賬號下的 賬號設(shè)置-API信息 中可以找到感混。打其它類型的包的方法與development類似端幼,可自定義一個新的lane實現(xiàn)。

在終端輸入

fastlane development_build

便會進行自動打包并上傳蒲公英了弧满。

7. 雙重認(rèn)證

單獨跑fastlane是沒什么問題婆跑,就是提示需要雙重認(rèn)證(two factor)
因為使用的是Jenkins,只能執(zhí)行腳本無法輸入內(nèi)容庭呜。

  1. 訪問AppId管理網(wǎng)站滑进,生成專用密碼。

2. 我們需要用到 spaceship(可以訪問Apple Developer Center和iTunes Connect API)募谎, 獲取session:fastlane spaceauth -u abc@qq.com(APPID)

配置環(huán)境變量:

$ vim ~/.bash_profile
# App專用密碼
export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=專用密碼
# 
export FASTLANE_SESSION='YOUR SESSION'

session有過期時間扶关,打包失敗的時候記得去打包機更新一下

8. CodeSign

在執(zhí)行fastlane打包腳本的時候會遇到代碼簽名的問題,不同Xcode版本貌似有區(qū)別近哟,現(xiàn)在基本上應(yīng)該都在9.0以上了驮审,所以就按照9.0以上版本進行配置:

  • 使用match的情況:
    進入工程目錄
$ fastlane match init

會要求你輸入用來存放證書和描述文件的git倉庫地址:

fastlane match supports multiple storage modes, please select the one you want to use:
1. git
2. google_cloud

這里選擇1,

[14:59:31]: Please create a new, private git repository to store the certificates and profiles there
[14:59:31]: URL of the Git Repo:

輸入git倉庫URL地址,,之后會在fastlane文件夾下生成一個MatchFile疯淫。
修改FastFile文件:

# 添加 match 
 match(type: "development") #type can be: appstore, adhoc, enterprise or development
  • 不適用match的情況地来,需要在gym函數(shù)中添加export_options參數(shù),將bundleid和provisioningProfiles映射起來:
gym(
      clean: true, 
      configuration: "Debug", 
      scheme: "Rain", 
      export_method: "development", 
      output_directory:"./fastlane/build",
      export_options: {
         provisioningProfiles: {
            "com.passion.raining" => "Development_com.passion.raining.mobileprovision"
         }
       }
      )

重置證書:

# development, distribution and enterprise
$ fastlane match nuke distribution

持續(xù)化集成工具——Jenkins

Jenkins 是一個開源項目熙掺,提供了一種易于使用的持續(xù)集成系統(tǒng)未斑,使開發(fā)者從繁雜的集成中解脫出來,專注于更為重要的業(yè)務(wù)邏輯實現(xiàn)上币绩。同時 Jenkins 能實施監(jiān)控集成中存在的錯誤蜡秽,提供詳細(xì)的日志文件和提醒功能,還能用圖表的形式形象地展示項目構(gòu)建的趨勢和穩(wěn)定性缆镣。

安裝Jenkins

安裝過程如下:
1.點擊 http://mirrors.jenkins.io/war-stable/latest/jenkins.war 下載最新的Jenkins.war芽突,也可以從官網(wǎng)https://jenkins.io/ 上下載最新的pkg安裝包進行安裝。

2.打開終端董瞻,進入war包所在目錄寞蚌,執(zhí)行以下命令:

java -jar jenkins.war

注意:Jenkins依賴于Java運行環(huán)境,因此需要首先安裝JDK,下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

3.執(zhí)行完成之后打開瀏覽器輸入http://localhost:8080/

4.彈出Jenkins安裝界面钠糊,會讓你輸入安全密碼,輸入完成之后選擇默認(rèn)安裝挟秤。

5.新建管理員賬號密碼

對以上過程有疑問的話可以參考手把手教你利用Jenkins持續(xù)集成iOS項目

安裝插件

還是登錄http://localhost:8080/ ,選擇系統(tǒng)管理 - 管理插件抄伍。

安裝GitLab插件
在可選插件中選擇GitLab Plugin和Gitlab Hook Plugin進行安裝艘刚。

安裝Xcode插件
在可選插件中選擇Xcode integration進行安裝。

安裝完成之后截珍,我們就可以配置構(gòu)建項目了攀甚。

構(gòu)建任務(wù)

1.點擊新建,輸入名稱岗喉,構(gòu)建一個自由風(fēng)格的軟件項目

image

2.配置Git

image

添加Git倉庫地址云稚,可以是HTTP也可以是SSH。點擊Add

如果是HTTP

image

如果是SSH

image

注意:UserName是取一個名字沈堡,填寫的Key是私鑰静陈。

3.配置腳本

image

因為我的Git倉庫的目錄是這樣的

image

所以在執(zhí)行fastlane development_build之前需要進入TestCI目錄,即fastlane文件夾所在目錄诞丽。

4.添加完成之后點擊立即構(gòu)建

image

5.執(zhí)行成功顯示如下

image

可以點擊進入查看控制臺輸出

image

參考鏈接

http://www.reibang.com/p/0a113f754c09
http://www.reibang.com/p/41ecb06ae95f
https://mp.weixin.qq.com/s/4I9lHEf5TvwwGtVPTjKFUw

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鲸拥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子僧免,更是在濱河造成了極大的恐慌刑赶,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懂衩,死亡現(xiàn)場離奇詭異撞叨,居然都是意外死亡金踪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門牵敷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胡岔,“玉大人,你說我怎么就攤上這事枷餐“腥常” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵毛肋,是天一觀的道長怨咪。 經(jīng)常有香客問我,道長润匙,這世上最難降的妖魔是什么诗眨? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮孕讳,結(jié)果婚禮上辽话,老公的妹妹穿的比我還像新娘。我一直安慰自己卫病,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布典徘。 她就那樣靜靜地躺著蟀苛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逮诲。 梳的紋絲不亂的頭發(fā)上帜平,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音梅鹦,去河邊找鬼裆甩。 笑死乏盐,一個胖子當(dāng)著我的面吹牛沾凄,可吹牛的內(nèi)容都是我干的仑性。 我是一名探鬼主播勾徽,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瓣喊,長吁一口氣:“原來是場噩夢啊……” “哼坝锰!你這毒婦竟也來了瘫絮?” 一聲冷哼從身側(cè)響起宾添,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤锭弊,失蹤者是張志新(化名)和其女友劉穎堪澎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體味滞,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡樱蛤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年钮呀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昨凡。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡爽醋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出土匀,到底是詐尸還是另有隱情子房,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布就轧,位于F島的核電站证杭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏妒御。R本人自食惡果不足惜解愤,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乎莉。 院中可真熱鬧送讲,春花似錦、人聲如沸惋啃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽边灭。三九已至异希,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绒瘦,已是汗流浹背称簿。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惰帽,地道東北人憨降。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像该酗,于是被迫代替她去往敵國和親授药。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容