持续化集成(三):Jenkins + Fastlane 打包

Jenkins iOS打包我目前了解的几种方式:

1.使用jenkins xcode 插件,对应的要添加证书和描述文件,然后对应的填写构建参数。
2.使用jenkins xcodebuild + xcrun命令 这里我只简单写一些常用的方法 ,中间会遇到xcode一个文件丢失的问题, xcode 9 之后有个文件被移除掉了,这两种方式我就不展开了,想要使用的请自行搜索查下,网上也有很多教程。(下面代码转自手把手教你利用Jenkins持续集成iOS项目)

# 工程名
APP_NAME="YourProjectName"
# 证书
CODE_SIGN_DISTRIBUTION="iPhone Distribution: Shanghai ******* Co., Ltd."
# info.plist路径
project_infoplist_path="./${APP_NAME}/Info.plist"
#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
#要上传的ipa文件路径
IPA_PATH="$HOME/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt
//下面2行是没有Cocopods的用法
echo "=================clean================="
xcodebuild -target "${APP_NAME}"  -configuration 'Release' clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
//下面2行是集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}"  -configuration 'Release' clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/"${IPANAME}"

使用fastlane 打包,个人觉得是更方便管理,更容易操作。

Fastlane 的使用,网上已经有很多教程了,我只写一下自己遇到的坑点和总结。其实跟我们安装Cocoapods挺类似的,基本上你装过Pod,环境就基本好了,例如ruby环境,你只需要了解的就是Fastlane 的一些Action。
如果环境安装失败,请移步查看
Rvm + Ruby +Gem 相关命令
下面是自己写的一个 fastfile 文件

# 定义fastlane版本号
fastlane_version "2.111.0" 
# 定义打包平台
default_platform :ios
# 任务脚本
platform :ios do
#开始前操作  
before_all do
end

desc "Jenkins版本打包"
lane :YLAPP do |options|
    #target
    target = options[:target]
    #scheme
    scheme = options[:scheme]
    #configuration 可以不指定
    # configuration = options[:configuration]
    #时间暂时没用到
    currentTime = Time.new.strftime("%Y%m%d%H%M")
    #修改版本号为打包buildNumber
    increment_build_number(
      build_number: options[:build_number]
    )
    #获取target 版本号
    version_number = get_version_number(target: "#{target}")
    #获取buildNumber
    build_number = get_build_number(xcodeproj: "#{target}.xcodeproj")
    #输出方式如果企业包打包方式改为企业打包
    export_method = "ad-hoc"
    if target == "Enterprise" then
        export_method = "enterprise"
    end
# 开始打包
gym(
    #输出的ipa名称
    output_name:"#{scheme}.ipa",
    # 隐藏没有必要的信息
    silent: true,  
    # 是否清空以前的编译信息 true:是
    clean:true,
    #scheme
    scheme: "#{scheme}", 
    # 指定打包方式,Release Debug Test 未指定就按照scheme 指定的configuration
    # configuration:"#{configuration}",
    # 指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development
    export_method:"#{export_method}",
    # 更新描述  
    export_xcargs: "-allowProvisioningUpdates",
    #是否包含调试符号
    include_symbols: false,
    #是否开启bitcode
    include_bitcode: false,
    # 指定输出文件夹
    output_directory:"~/build/#{scheme}/#{version_number}/#{build_number}/",
) 
#上传到firim
firim(firim_api_token: "******************************")
end

#结束后的操作
after_all do |lane|
# This block is called, only if the executed lane was successful

# slack(
#   message: "Successfully deployed new App Update."
# )
end

error do |lane, exception|
# slack(
#   message: exception.message,
#   success: false
# )
end
end

一些常Action Tips

#添加版本插件
fastlane add_plugin versioning
# 以下两个action来自fastlane-plugin-versioning,
# 第一个递增 Build,第二个设定Version。
# 如果你有多个target,就必须指定target的值,否则它会直接找找到的第一个plist修改
increment_build_number_in_plist(target: 'targetName')
#增加build版本
increment_build_number(
    xcodeproj: 'personProject',
    build_number: "#{build}",
)

increment_version_number_in_plist(
   target: 'target',
   version_number: '1.0'
)

#指定描述文件
export_options: {
    provisioningProfiles: {
        "com.test.conner" => "ios_dis",
    }
},

#添加firim 上传插件
fastlane add_plugin firim 
# 上传firim
firim(firim_api_token: "此处填写fir的用户token"),
#添加pgyer
fastlane add_plugin pgyer
# 上传蒲公英
pgyer(api_key: "11111122222233333444444", user_key: "111122233344455555", update_description: "#{option[:desc]}")
#提交到testFlight
pilot(
    #忽略等待包上传成功
    skip_waiting_for_build_processing: true,
)  


#常用参数:
scheme :#指定打的哪个scheme
project :#指定project (未使用cocopods)
workspace #:指定workspace (使用cocopods)
clean :#打包前clean
xcargs : #附加一些参数传递给xcodebuild 如: xcargs: 'DEBUG_INFORMATION_FORMAT="dwarf-with-dsym"',
export_method :#出包方法 app-store, ad-hoc, package, enterprise, development
configuration : #指定构建App的配置  Release、Debug、自定义
output_directory : #输出目录
output_name :#输出名称
include_symbols :#是否包含调试符号
include_bitcode :#是否开启bitcode

相关文章:

持续化集成(一):Jenkins安装
持续化集成(二):Jenkins 常用配置
持续化集成(三):Jenkins + Fastlane 打包

你可能感兴趣的:(持续化集成(三):Jenkins + Fastlane 打包)