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

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第1张图片
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/

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第2张图片
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会停掉

第一次运行的时候会出现以下界面


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第3张图片
Jenkins初始化

然后在终端输入

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

复制里面的秘钥然后输入进入下一步

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第4张图片
Jenkins选择插件

选择左边推荐的安装插件


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第5张图片
Jenkins插件安装

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

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第6张图片
创建账号

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

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第7张图片
Jenkins配置

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第8张图片
Jenkins配置

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第9张图片
Jenkins配置

开始使用Jenkins

  1. 点击 新建任务

    iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第10张图片
    Jenkins使用

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


    iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第11张图片
    Jenkins使用
  3. 设置源码获取方式git方式


    iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第12张图片
    Jenkins使用

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第13张图片
git配置

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第14张图片
HTTPS

(2)如果是SSH方式


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第15张图片
SSH

配置好之后

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第16张图片
项目配置

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第17张图片
Jenkins项目配置

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

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第18张图片
构建项目

构建完成后在工作空间就可以看到拉取到的代码了
iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第19张图片
项目构建

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

首先需要在项目中创建fastlane的基本配置,根据我上面给的fastlane的自动化打包,在配置好后

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第20张图片
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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第21张图片
配置shell1

然后输入shell脚本语言


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第22张图片
配置shell2

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第23张图片
项目的工作空间

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

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

首先需要安装相应的插件


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第24张图片
Jenkins插件

然后搜索Git Parameter去安装插件

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第25张图片
Jenkins插件

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

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第26张图片
项目分支

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第27张图片
分支设置
iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第28张图片
然后设置动态的分支

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第29张图片
分支设置

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

添加参数中选中Choice Parameter

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第30张图片
动态选择发布平台1

然后配置如下


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第31张图片
动态选择发布平台2

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第32张图片
动态选择发布平台3

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第33张图片
动态选择发布平台4

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

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

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第34张图片
直接跳转发布平台1

然后去蒲公英或者fir平台找到发布成功后的二维码地址,然后填写如下
iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第35张图片
直接跳转发布平台2

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第36张图片
支持html

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第37张图片
支持html

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


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第38张图片
直接跳转发布平台

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

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

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第39张图片
邮件通知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:默认接收人列表,已逗号进行分割

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第40张图片
邮件通知2

点击高级后出现进一步的配置,勾选 Use SMTP Authentication,然后填写你发送邮件的邮箱账号和密码,这个 SMTP port是126邮箱是25,每个邮箱不一样,qq就是其他的了。
iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第41张图片
邮件通知3

选择邮件发送触发为Always

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第42张图片
邮件通知4

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

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第43张图片
邮件通知5

然后填写好自己发送的邮箱
iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第44张图片
邮件通知6

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

进一步配置


iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第45张图片
邮件通知7

然后配置发送邮件的条件

iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第46张图片
邮件通知8

选择 Always
iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知_第47张图片
邮件通知9

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

你可能感兴趣的:(iOS 中Jenkins+fastlane自动化打包上传到蒲公英或者fir,成功后邮件通知)