iOS 中Jenkins+fastlane自動化打包上傳到蒲公英或者fir悲没,成功后郵件通知

fastlane安裝

可以參考我的的文章
iOS使用fastlane實現自動化打包

Jenkins的安裝

??因為Jenkins是用Java語言編寫的,所以需要java的支持,建議使用1.8版本的JDK
查看當前安裝的Java版本

java -version

如果機器沒有安裝1.8版本的建議下載安裝http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Java8的JDK下載

下載完成后直接安裝就行

配置Java環(huán)境

open -t ~/.bash_profile

添加Java配置文件

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

這個/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home是我的電腦本地的Java位置蕉毯,根據的你的情況配置好自己的本地Java位置的路徑

我采用的是Jenkins的war的方式進行安裝

下載Jenkins的war包
https://jenkins.io/zh/download/

Jenkins下載

可能下載速度會特別的慢,下載完成后思犁,解壓打開文件放到個人目錄/Users/yourname/Jenkins
同時配置Jenkins的環(huán)境

open -t ~/.bash_profile

添加一行

export JENKINS_HOME=/Users/hf/Jenkins

這個/Users/hf/Jenkins是我電腦本地的路徑
然后在終端輸入

source  ~/.bash_profile 

使得設置生效

cd 到Jenkins存放的目錄
終端之執(zhí)行命令

java -jar jenkins.war --httpPort=8080 

看到 以下信息說明安裝完成
Jenkins is fully up and running

初始化jenkins

瀏覽器默認訪問http://localhost:8080/, 可進入jenkins配置頁面代虾。 不要關閉終端否則jenkins會停掉

第一次運行的時候會出現以下界面


Jenkins初始化

然后在終端輸入

open /Users/你的本地的路徑名/.jenkins/secrets/initialAdminPassword

復制里面的秘鑰然后輸入進入下一步

Jenkins選擇插件

選擇左邊推薦的安裝插件


Jenkins插件安裝

然后耐心等待插件安裝完成

安裝成功后,進入創(chuàng)建管理員賬號界面激蹲,填入信息后棉磨,后續(xù)就可以用此賬號進行登錄了。


創(chuàng)建賬號

創(chuàng)建成功后学辱,進入實例配置頁面含蓉,我們先保持默認配置,后續(xù)可以進行更換项郊。

Jenkins配置

點擊保持后馅扣,即可完成安裝導向,如下圖着降。


Jenkins配置

點擊開始使用Jenkins差油,即可進入Jenkins首頁(儀表盤)


Jenkins配置

開始使用Jenkins

  1. 點擊 新建任務

    Jenkins使用

  2. 輸入項目名,然后選擇第一項任洞,點擊確定按鈕


    Jenkins使用
  3. 設置源碼獲取方式git方式


    Jenkins使用

添加Git倉庫地址蓄喇,可以是HTTPS也可以是SSH,輸入地址后交掏,發(fā)現沒有權限


git配置

需要配置Git權限妆偏,點擊下面的Credentials添加證書
(1)如果是HTTPS方式


HTTPS

(2)如果是SSH方式


SSH

配置好之后

項目配置

(3)設置獲取代碼更新的輪詢方式 每隔5分鐘一次,有更新時自動獲取盅弛。點擊钱骂?號可以查看相關幫助信息


Jenkins項目配置

然后點擊保存回到Jenkins的首頁開始構建項目叔锐,目的是先獲取代碼

構建項目

構建完成后在工作空間就可以看到拉取到的代碼了
項目構建

Jenkins進一步配置配合fastlane自動化打包

首先需要在項目中創(chuàng)建fastlane的基本配置,根據我上面給的fastlane的自動化打包见秽,在配置好后

fastlane配置

這邊我已經配置好的一套fastlane代碼如下

# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself



################## READ  FIRST ##################

######## 使用方法1 自定義version和build #########
###### fastlane iosDebug_pgy version:1.0.1  build:1 ######

######## 使用方法2 不寫version和build 這時build會根據之前的build+1 #########
###### fastlane iosDebug_pgy  ######

###如果需要上傳到蒲公英愉烙,請運行前先安裝插件安裝蒲公英的fastlane add_plugin pgyer ###


default_platform(:ios)   # 設置默認的平臺為iOS

############# 需要根據項目自定義設置 ############
APP_NAME = "APP_NAME"             #輸出包時app的名字
APP_SCHEME = "APP_SCHEME"   #這個app打開manage schemes下選中的名稱
APP_IPA_OUTPUT_DIRECTORY = "build/packages"    # 打包所保存的文件目錄,可以不設置
# 配置蒲公英的apiKey 和 userKey 需要設置 
APP_PGYER_API_KEY = ""
APP_PGYER_USER_KEY = ""
# 配置fir的token
APP_FIR_API_TOKEN = ""


######## 不用設置的 #####################
APP_XCODEPROJ = "#{APP_NAME}.xcodeproj"      # app的xcodeproj
APP_WORKSPACE = "#{APP_NAME}.xcworkspace"    # app的xcworkspace
APP_IPA_TIME = Time.now.strftime("%Y-%m-%d_%H:%M")  # 打包的時間
# APP_INFO_PLIST_PATH = './HFMyTest/HFMyTest-Info.plist'
APP_ENV_PREFIX = ""   # 打包完成后的包文件名字的前綴 區(qū)別release和debug



# 版本 build number++
def prepare_version(options)

    #增加version版本號
    if options[:version]
      increment_version_number(
        version_number: options[:version],
        xcodeproj: "#{APP_XCODEPROJ}",
      )
    else
      # 可以不設置
    end

    
    #增加build號  只能是整數和浮點數
    if options[:build]
      increment_build_number(
        build_number: options[:build],
        xcodeproj: "#{APP_XCODEPROJ}",
      )
    else
      last_build = get_build_number(xcodeproj: "#{APP_XCODEPROJ}")
      now_build = last_build.to_i + 1
      increment_build_number(
        build_number: now_build,
        xcodeproj: "#{APP_XCODEPROJ}",
      )
    end
end


#統(tǒng)一的打包方法
def generate_ipa(exportMethod,configuration,options)
    
    # 設置version和build
    prepare_version(options)  

    app_version = get_version_number(target: "#{APP_SCHEME}")     # 得到最新的version
    app_build = get_build_number(xcodeproj: "#{APP_XCODEPROJ}")         # 最新的build
    # app包名
    app_ipa_name = "#{APP_NAME}_" "#{APP_ENV_PREFIX}_" + "#{APP_IPA_TIME}_" + "#{app_version}_" + "#{app_build}"
   
    #打包
    gym(
      clean: true,       # 打包前clean項目
      silent: true,      # 隱藏沒有必要的信息
      scheme: "#{APP_SCHEME}",
      workspace: "#{APP_WORKSPACE}", 
      configuration: "#{configuration}",  # 環(huán)境
      export_method: "#{exportMethod}",   # app-store解取、ad-hoc步责、development、enterprise
      output_directory: "#{APP_IPA_OUTPUT_DIRECTORY}", #ipa的存放目錄
      output_name: "#{app_ipa_name}", # 輸出ipa的文件名
      # 生成的ipa文件是否包含symbols禀苦,這個文件是內存標記文件蔓肯,用來定位錯誤信息的,有了這個安裝包大小會變大
      include_symbols: true,
      # 生成的ipa文件是否包含bitcode,在本身項目中也可以配置
      include_bitcode: false,
      # keychain授權 Xcode9不允許訪問鑰匙串密碼振乏,所以我們需要手動開權限
      export_xcargs: "-allowProvisioningUpdates"
      )

end

platform :iOS do
  # before_all就是先于所有l(wèi)ane執(zhí)行的任務
  before_all do
       # 根據安裝路徑指定要使用的Xcode 
       xcode_select "/Applications/Xcode.app"
       # 超時失敗省核,默認的timeout是10秒
       ENV["FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT"] = "120"
  end

  # lane  自定義的任務

  #debug包 上傳到蒲公英平臺
  #option類似一個字典 option[:version] 取其中value值version  
  lane :iosDebug_pgy do |options|
    APP_ENV_PREFIX = "debug_"
    generate_ipa("development","Debug",options)

    #上傳至蒲公英 在這之前請安裝插件 fastlane add_plugin pgyer
    if APP_PGYER_API_KEY.length > 0 && APP_PGYER_USER_KEY.length > 0
     pgyer(
       api_key: "#{APP_PGYER_API_KEY}", 
       user_key: "#{APP_PGYER_USER_KEY}", 
      )
    notification(title: "發(fā)布成功!", message: "已成功上傳到蒲公英平臺, 趕快聯系測試人員開始測試吧!", open: "https://www.pgyer.com/")
    end
  end

 #debug包 上傳到fir
  lane :iosDebug_fir do |options|
    APP_ENV_PREFIX = "debug_"
    generate_ipa("development","Debug",options)

    #上傳至fir 在這之前請安裝插件 fastlane add_plugin firim
    if APP_FIR_API_TOKEN.length > 0 
      firim(
        firim_api_token: "#{APP_FIR_API_TOKEN}", 
      )
     notification(title: "發(fā)布成功!", message: "已成功上傳到fir平臺, 趕快聯系測試人員開始測試吧!", open: "https://fir.im/apps")
    end
  end

  # release發(fā)布包
  lane :iosRelease do |options|
    APP_ENV_PREFIX = "appstore_"
    generate_ipa("app-store","Release",options)
    # 上傳至app-store
    deliver(
      force: true,              #是否跳過HTML驗證報告,默認false
      skip_metadata: true,      #是否跳過上傳metadata昆码,默認false
      skip_screenshots: true    #是否跳過上傳屏幕截圖气忠,默認false
    )
  end

  # testFlight包  
  lane :iosTestFlight do |options|
    APP_ENV_PREFIX = "adhoc_"
    generate_ipa("ad-hoc","Release",options)
    # 管理TestFlight的測試用戶,上傳二進制文件
    pilot
  end

  # 當lane執(zhí)行完成之后進行哪些操作
  after_all do |lane|
  #發(fā)送一個桌面通知
  #notification(title: "execute success", subtitle: "執(zhí)行成功!", message: "lane已經執(zhí)行成功了")
  end

  error do |lane, exception|
  puts("#{exception.message}")
  notification(title: "執(zhí)行#{lane}發(fā)生異常!", message: "發(fā)生異常, 詳情請查看控制臺!")
  end

end

因為代碼要上傳到蒲公英和fir平臺赋咽,所以需要在相應的平臺申請獲取到相應的key

接下來在Jenkins中配置shell腳本來自動執(zhí)行fastlane


配置shell1

然后輸入shell腳本語言


配置shell2

其中cd到項目的目錄這個項目是Jenkins所在的工作空間的位置


項目的工作空間

配置好之后回到Jenkins的首頁然后Build Now來立即構建項目旧噪,接下來就等待項目構建完成,然后自動上傳到蒲公英平臺脓匿。

Jenkins根據分支來拉取代碼淘钟,并且自動化選擇構建debug還是release等

首先需要安裝相應的插件


Jenkins插件

然后搜索Git Parameter去安裝插件

Jenkins插件

安裝完成后,在項目的配置中可以發(fā)現一個Git Parameter選項

項目分支

分支設置
然后設置動態(tài)的分支

保存后回到Jenkins的首頁構建項目時會發(fā)現出現可以選中分支進行打包


分支設置

動態(tài)選擇打包上傳到蒲公英或者fir平臺

添加參數中選中Choice Parameter

動態(tài)選擇發(fā)布平臺1

然后配置如下


動態(tài)選擇發(fā)布平臺2

然后在打包的shell的腳本就可以改寫為


動態(tài)選擇發(fā)布平臺3

接下來在Jenkins首頁立即構建項目中發(fā)現可以選中不同的平臺了


動態(tài)選擇發(fā)布平臺4

上傳成功后可以通過Jenkins直接跳轉到蒲公英或者fir平臺

首先去安裝插件description setter陪毡,然后在項目配置中可以選擇如下

直接跳轉發(fā)布平臺1

然后去蒲公英或者fir平臺找到發(fā)布成功后的二維碼地址米母,然后填寫如下
直接跳轉發(fā)布平臺2

同時需要配置Jenkins支持html,設置如下


支持html

支持html

這樣在構建項目成功后就會出現可以直接點擊下載的地址


直接跳轉發(fā)布平臺

設置發(fā)布成功后郵件通知用戶

首先安裝插件Email Extension Plugin
安裝完成后去配置

郵件通知1

SMTP服務器:下面的smtp.126.com是我選擇了126郵箱毡琉,如果你選擇qq郵箱的話就是smtp.qq.com铁瞒,注意qq的SMTP服務器的默認是沒有開啟,需要的話自行查閱資料怎么開啟桅滋,126是默認開啟的
Default user E-mail suffix:根據自己情況填寫
勾選Use SMTP Authentication慧耍,用戶名和密碼填寫自己的
SMTP port:默認25
Default Content Type:郵件文檔類型
Default Recipients:默認接收人列表,已逗號進行分割

郵件通知2

點擊高級后出現進一步的配置丐谋,勾選Use SMTP Authentication芍碧,然后填寫你發(fā)送郵件的郵箱賬號和密碼,這個SMTP port是126郵箱是25号俐,每個郵箱不一樣泌豆,qq就是其他的了。
郵件通知3

選擇郵件發(fā)送觸發(fā)為Always

郵件通知4

保存后吏饿,接下來在項目的配置中構建后操作中選中增加構建后操作步驟中選中如下

郵件通知5

然后填寫好自己發(fā)送的郵箱
郵件通知6

Disable Extended Email Publisher:勾選后踪危,郵件就不發(fā)送蔬浙,看自己的情況嘍,如果你想調試某些東西陨倡,又不想發(fā)郵件出去就可以勾選這個敛滋。
Project Recipient List:收件人地址许布;多個收件人郵件地址用逗號進行分割兴革;想使用全局默認配置的話,可以使用DEFAULT_RECIPIENTS蜜唾。 `Project Reply-To List:`允許回復人的地址杂曲;想使用系統(tǒng)設置中的默認值的話,可以使用DEFAULT_REPLYTO袁余;
Content Type:郵件文檔的類型擎勘,可以設置HTML等格式;
Default Subject:默認主題颖榜,也就是郵件標題棚饵;同理可以使用$DEFAULT_SUBJECT
Default Content:默認郵件內容
Attach Build Log:發(fā)送的郵件是否包含日志;

進一步配置


郵件通知7

然后配置發(fā)送郵件的條件

郵件通知8

選擇Always
郵件通知9

這樣保存后掩完,然后構建項目噪漾,在項目構建成功后就會自動發(fā)送郵件通知用戶。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末且蓬,一起剝皮案震驚了整個濱河市欣硼,隨后出現的幾起案子,更是在濱河造成了極大的恐慌恶阴,老刑警劉巖诈胜,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異冯事,居然都是意外死亡焦匈,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門昵仅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來括授,“玉大人,你說我怎么就攤上這事岩饼〖孕椋” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵籍茧,是天一觀的道長版述。 經常有香客問我,道長寞冯,這世上最難降的妖魔是什么渴析? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任晚伙,我火速辦了婚禮,結果婚禮上俭茧,老公的妹妹穿的比我還像新娘咆疗。我一直安慰自己,他們只是感情好母债,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布午磁。 她就那樣靜靜地躺著,像睡著了一般毡们。 火紅的嫁衣襯著肌膚如雪迅皇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天衙熔,我揣著相機與錄音登颓,去河邊找鬼。 笑死红氯,一個胖子當著我的面吹牛框咙,可吹牛的內容都是我干的。 我是一名探鬼主播痢甘,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼喇嘱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了产阱?” 一聲冷哼從身側響起婉称,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎构蹬,沒想到半個月后王暗,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡庄敛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年俗壹,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藻烤。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绷雏,死狀恐怖,靈堂內的尸體忽然破棺而出怖亭,到底是詐尸還是另有隱情涎显,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布兴猩,位于F島的核電站期吓,受9級特大地震影響,放射性物質發(fā)生泄漏倾芝。R本人自食惡果不足惜讨勤,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一箭跳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潭千,春花似錦谱姓、人聲如沸挫望。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽议街。三九已至割捅,卻和暖如春奶躯,著一層夾襖步出監(jiān)牢的瞬間帚桩,已是汗流浹背亿驾。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留账嚎,地道東北人莫瞬。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像郭蕉,于是被迫代替她去往敵國和親疼邀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內容