美文网首页iOS开发杂货铺
iOS 中Jenkins+fastlane自动化打包上传到蒲公英

iOS 中Jenkins+fastlane自动化打包上传到蒲公英

作者: 小盟城主 | 来源:发表于2020-02-01 20:35 被阅读0次

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环境

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的环境
open -t ~/.bash_profile

添加一行

export JENKINS_HOME=/Users/hf/Jenkins

这个/Users/hf/Jenkins是我电脑本地的路径
然后在终端输入

source  ~/.bash_profile 

使得设置生效

cd 到Jenkins存放的目录
终端之执行命令

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插件安装

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

安装成功后,进入创建管理员账号界面,填入信息后,后续就可以用此账号进行登录了。


创建账号

创建成功后,进入实例配置页面,我们先保持默认配置,后续可以进行更换。

Jenkins配置

点击保持后,即可完成安装导向,如下图。


Jenkins配置

点击开始使用Jenkins,即可进入Jenkins首页(仪表盘)


Jenkins配置

开始使用Jenkins

  1. 点击 新建任务

    Jenkins使用
  2. 输入项目名,然后选择第一项,点击确定按钮


    Jenkins使用
  3. 设置源码获取方式git方式


    Jenkins使用

添加Git仓库地址,可以是HTTPS也可以是SSH,输入地址后,发现没有权限


git配置

需要配置Git权限,点击下面的Credentials添加证书
(1)如果是HTTPS方式


HTTPS

(2)如果是SSH方式


SSH

配置好之后

项目配置

(3)设置获取代码更新的轮询方式 每隔5分钟一次,有更新时自动获取。点击?号可以查看相关帮助信息


Jenkins项目配置

然后点击保存回到Jenkins的首页开始构建项目,目的是先获取代码

构建项目
构建完成后在工作空间就可以看到拉取到的代码了
项目构建

Jenkins进一步配置配合fastlane自动化打包

首先需要在项目中创建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 = ""   # 打包完成后的包文件名字的前缀 区别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


#统一的打包方法
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}",  # 环境
      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就是先于所有lane执行的任务
  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: "发布成功!", 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: "发布成功!", message: "已成功上传到fir平台, 赶快联系测试人员开始测试吧!", open: "https://fir.im/apps")
    end
  end

  # release发布包
  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执行完成之后进行哪些操作
  after_all do |lane|
  #发送一个桌面通知
  #notification(title: "execute success", subtitle: "执行成功!", message: "lane已经执行成功了")
  end

  error do |lane, exception|
  puts("#{exception.message}")
  notification(title: "执行#{lane}发生异常!", message: "发生异常, 详情请查看控制台!")
  end

end

因为代码要上传到蒲公英和fir平台,所以需要在相应的平台申请获取到相应的key

接下来在Jenkins中配置shell脚本来自动执行fastlane


配置shell1

然后输入shell脚本语言


配置shell2

其中cd到项目的目录这个项目是Jenkins所在的工作空间的位置


项目的工作空间

配置好之后回到Jenkins的首页然后Build Now来立即构建项目,接下来就等待项目构建完成,然后自动上传到蒲公英平台。

Jenkins根据分支来拉取代码,并且自动化选择构建debug还是release等

首先需要安装相应的插件


Jenkins插件

然后搜索Git Parameter去安装插件

Jenkins插件

安装完成后,在项目的配置中可以发现一个Git Parameter选项

项目分支 分支设置 然后设置动态的分支

保存后回到Jenkins的首页构建项目时会发现出现可以选中分支进行打包


分支设置

动态选择打包上传到蒲公英或者fir平台

添加参数中选中Choice Parameter

动态选择发布平台1

然后配置如下


动态选择发布平台2

然后在打包的shell的脚本就可以改写为


动态选择发布平台3

接下来在Jenkins首页立即构建项目中发现可以选中不同的平台了


动态选择发布平台4

上传成功后可以通过Jenkins直接跳转到蒲公英或者fir平台

首先去安装插件description setter,然后在项目配置中可以选择如下

直接跳转发布平台1
然后去蒲公英或者fir平台找到发布成功后的二维码地址,然后填写如下
直接跳转发布平台2

同时需要配置Jenkins支持html,设置如下


支持html
支持html

这样在构建项目成功后就会出现可以直接点击下载的地址


直接跳转发布平台

设置发布成功后邮件通知用户

首先安装插件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,然后填写你发送邮件的邮箱账号和密码,这个SMTP port是126邮箱是25,每个邮箱不一样,qq就是其他的了。
邮件通知3

选择邮件发送触发为Always

邮件通知4

保存后,接下来在项目的配置中构建后操作中选中增加构建后操作步骤中选中如下

邮件通知5
然后填写好自己发送的邮箱
邮件通知6

Disable Extended Email Publisher:勾选后,邮件就不发送,看自己的情况喽,如果你想调试某些东西,又不想发邮件出去就可以勾选这个。
Project Recipient List:收件人地址;多个收件人邮件地址用逗号进行分割;想使用全局默认配置的话,可以使用DEFAULT_RECIPIENTS。 `Project Reply-To List:`允许回复人的地址;想使用系统设置中的默认值的话,可以使用DEFAULT_REPLYTO;
Content Type:邮件文档的类型,可以设置HTML等格式;
Default Subject:默认主题,也就是邮件标题;同理可以使用$DEFAULT_SUBJECT
Default Content:默认邮件内容
Attach Build Log:发送的邮件是否包含日志;

进一步配置


邮件通知7

然后配置发送邮件的条件

邮件通知8
选择Always
邮件通知9

这样保存后,然后构建项目,在项目构建成功后就会自动发送邮件通知用户。

相关文章

网友评论

    本文标题:iOS 中Jenkins+fastlane自动化打包上传到蒲公英

    本文链接:https://www.haomeiwen.com/subject/ezatxhtx.html