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
下載完成后直接安裝就行
配置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/
可能下載速度會特別的慢,下載完成后思犁,解壓打開文件放到個人目錄
/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會停掉
第一次運行的時候會出現以下界面
然后在終端輸入
open /Users/你的本地的路徑名/.jenkins/secrets/initialAdminPassword
復制里面的秘鑰然后輸入進入下一步
選擇左邊推薦的安裝插件
然后耐心等待插件安裝完成
安裝成功后,進入創(chuàng)建管理員賬號界面激蹲,填入信息后棉磨,后續(xù)就可以用此賬號進行登錄了。
創(chuàng)建成功后学辱,進入實例配置頁面含蓉,我們先保持默認配置,后續(xù)可以進行更換项郊。
點擊保持后馅扣,即可完成安裝導向,如下圖着降。
點擊開始使用Jenkins差油,即可進入Jenkins首頁(儀表盤)
開始使用Jenkins
-
點擊 新建任務
-
輸入項目名,然后選擇第一項任洞,點擊確定按鈕
-
設置源碼獲取方式git方式
添加Git倉庫地址蓄喇,可以是HTTPS也可以是SSH,輸入地址后交掏,發(fā)現沒有權限
需要配置Git權限妆偏,點擊下面的Credentials添加證書
(1)如果是HTTPS方式
(2)如果是SSH方式
配置好之后
(3)設置獲取代碼更新的輪詢方式 每隔5分鐘一次,有更新時自動獲取盅弛。點擊钱骂?號可以查看相關幫助信息
然后點擊保存回到Jenkins的首頁開始構建項目叔锐,目的是先獲取代碼
構建完成后在工作空間就可以看到拉取到的代碼了
Jenkins進一步配置配合fastlane自動化打包
首先需要在項目中創(chuàng)建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
然后輸入shell腳本語言
其中cd到項目的目錄這個項目是Jenkins所在的工作空間的位置
配置好之后回到Jenkins的首頁然后Build Now
來立即構建項目旧噪,接下來就等待項目構建完成,然后自動上傳到蒲公英平臺脓匿。
Jenkins根據分支來拉取代碼淘钟,并且自動化選擇構建debug還是release等
首先需要安裝相應的插件
然后搜索Git Parameter
去安裝插件
安裝完成后,在項目的配置中可以發(fā)現一個Git Parameter
選項
保存后回到Jenkins的首頁構建項目時會發(fā)現出現可以選中分支進行打包
動態(tài)選擇打包上傳到蒲公英或者fir平臺
添加參數中選中Choice Parameter
然后配置如下
然后在打包的shell的腳本就可以改寫為
接下來在Jenkins首頁立即構建項目中發(fā)現可以選中不同的平臺了
上傳成功后可以通過Jenkins直接跳轉到蒲公英或者fir平臺
首先去安裝插件description setter
陪毡,然后在項目配置中可以選擇如下
然后去蒲公英或者fir平臺找到發(fā)布成功后的二維碼地址米母,然后填寫如下
同時需要配置Jenkins支持html,設置如下
這樣在構建項目成功后就會出現可以直接點擊下載的地址
設置發(fā)布成功后郵件通知用戶
首先安裝插件Email Extension Plugin
安裝完成后去配置
SMTP服務器:
下面的smtp.126.com
是我選擇了126郵箱毡琉,如果你選擇qq郵箱的話就是smtp.qq.com
铁瞒,注意qq的SMTP服務器的默認是沒有開啟,需要的話自行查閱資料怎么開啟桅滋,126是默認開啟的Default user E-mail suffix:
根據自己情況填寫勾選
Use SMTP Authentication
慧耍,用戶名和密碼填寫自己的SMTP port:
默認25Default Content Type:
郵件文檔類型Default Recipients:
默認接收人列表,已逗號進行分割
點擊高級后出現進一步的配置丐谋,勾選
Use SMTP Authentication
芍碧,然后填寫你發(fā)送郵件的郵箱賬號和密碼,這個SMTP port
是126郵箱是25号俐,每個郵箱不一樣泌豆,qq就是其他的了。選擇郵件發(fā)送觸發(fā)為Always
保存后吏饿,接下來在項目的配置中構建后操作中選中增加構建后操作步驟
中選中如下
然后填寫好自己發(fā)送的郵箱
Disable Extended Email Publisher:
勾選后踪危,郵件就不發(fā)送蔬浙,看自己的情況嘍,如果你想調試某些東西陨倡,又不想發(fā)郵件出去就可以勾選這個敛滋。
Project Recipient List
:收件人地址许布;多個收件人郵件地址用逗號進行分割兴革;想使用全局默認配置的話,可以使用DEFAULT_REPLYTO袁余;
Content Type:
郵件文檔的類型擎勘,可以設置HTML等格式;
Default Subject:
默認主題颖榜,也就是郵件標題棚饵;同理可以使用$DEFAULT_SUBJECT
Default Content:
默認郵件內容
Attach Build Log:
發(fā)送的郵件是否包含日志;
進一步配置
然后配置發(fā)送郵件的條件
選擇
Always
這樣保存后掩完,然后構建項目噪漾,在項目構建成功后就會自動發(fā)送郵件通知用戶。