jenkins + gitlab + fastlane 一键打包上传至蒲公英和 Fir

2022-03-25 16:25:26 浏览数 (1)

前言

在开发过程中,总是被其他同事(开发,测试,产品等)要求临时打个包。恰巧之前配置的是一套本地用Python命令的自动化打包工具,但是仍然无法避免的要贮藏当前分支的代码,然后切换分支在本机上打包。一来一回,很耽误时间,更不用说如果用的手动打包方式该有多浪费时间了。

那么如何提高工作效率呢?

把打包权限开放给测试,产品运维等同事,让他们随时可以打最新的包,让他们使用工具。我们只负责开发和提交代码,让测试来打包,让产品或运维来提审。其实最好就是部署devops平台(不了解的自己查资料),开发之后的流程与我们无关,一切的目的还是为了让自己能按时下班。

jenkins安装

代码语言:javascript复制
brew install jenkins

安装完成后,开启jenkins服务或者每次手动开启jenkins(一般用第一种比较方便)

代码语言:javascript复制
 #启动jenkins
 brew services start jenkins
 #停止jenkins 
 brew services stop jenkins
 #重启jenkins
 brew services restart jenkins
 
 #直接启动jenkins
jenkins

打开浏览器,输入localhost:8080,去相关路径找到密码复制进去即可

配置打包工程

首先检查有没有安装Git插件,如果没有,就在Plugin Manager安装一下即可。

新建一个打包空工程

拉到Source Code Management,输入你工程的gitlab http地址和想要打包的分支。第二行是要配置Credentials,点击add,直接使用默认的类型Username with password,然后输入你的gitlab用户名和密码即搞定。

接下来配置触发器Build Triggers, 我这里是配置的一个命令触发和每天定时打包。还可以配置其他的各种触发条件,比如想要配置gitlab推送代码这种方式触发,那还需要去gitlab配置api token,jenkins还要配置git lab connectionGitlab Jenkins搭建持续集成系统[1]

然后配置Build Environment,我这里的样例是配置了获取git提交日志,但是后面用fastlane获取提交日志也行,没有采用这个。

最后一步,Build,这里只写了fastlane ios agent_dev,其实就是执行fastlane脚本。

fastlane配置

讲讲我这里为什么使用fastlane,网上有些人是直接在jenkins上配置构建命令或者xcode build脚本的,我试过是可以的,但是其实在配置过程中,繁琐又容易踩很多坑。所以最后还是用了fastlane,只需要配置文件即可,以后也方便迁移修改,始终觉得无论什么工具,越简单越好。

fastlane安装

话不多说,直接开始,先更换ruby源

代码语言:javascript复制
$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
$ gem sources -l
https://gems.ruby-china.com
# 确保只有 gems.ruby-china.com

安装fastlane

代码语言:javascript复制
$ sudo gem install fastlane -NV

fastlane配置

cd 到项目的目录里,然后执行fastlane init

在这给大家推荐一个好用的工具Go2Shell,安装打开后,在finder上会出现一个笑脸按钮,点击后可以直接cd到当前目录,配合iTerm更好用哦。

如下,这里选择4(自定义配置)。2和3是TestFilght和App Store配置,我这里暂时用不上,所以不选,后续也可以自己加上。

当命令执行到 bundle update可能会卡住,需要打开项目目录下新增的文件GemFile,修改一下ruby源。保存后,继续在当前目录下执行bundle update即可。

代码语言:javascript复制
#旧
#source "https://rubygems.org"
#新
source "https://gems.ruby-china.com"

FastLane编写

准备工作做完了,打开项目的目录,会发现新增了FastLane文件夹,里面有个Fastfile文件。在里面配置打包脚本即可,以下是我的配置,修改后可以拿来直接用。在当前目录里执行fastlane即可测试本地打包是否能成功。

代码语言:javascript复制
default_platform(:ios)

platform :ios do
  desc "Description of what the lane does"
  

  before_all do
      changelog_from_git_commits(
      # commit message 范围:自上次成功提交至当前最新提交
      between: [ENV['GIT_PREVIOUS_SUCCESSFUL_COMMIT'] || "HEAD^", "HEAD"],
      # 格式化,%s 代表 commit message,%an 代表提交人名
      pretty: "n iOS n - %s (%an)",
      # 忽略 Merge 信息
      merge_commit_filtering: 'exclude_merges',
    )

    # faselane中pod install的操作
     targetName = "Backend"  #项目名称
     cocoapods
  end
  #-----------------------------------------------------------------------DEV配置
  lane :agent_dev do|options|
    currentTime = Time.new.strftime("%Y-%m-%d %H: %m: %S")
    gym(
     scheme:"Backend_debug",
     configuration: "Release", #Release 或者 debug
     clean:true, #清除上次构建
     workspace:"AgentBackend.xcworkspace", # 项目入口文件名 如果是工作控件请换成:workspace: "xxx. workspace"
     export_method:"ad-hoc",  #打包的类型 ad-hoc 或者App Store等
     output_directory:"/Users/XXX/Downloads/Backend_DEV#{currentTime}", #打包输出路径 我写的是时间,防止文件夹生成相同报错
     output_name:"Backend_DEV", #生成的ipa文件名
 export_xcargs: "-allowProvisioningUpdates"
    )
  puts "开始上传蒲公英"
  pgyer(api_key: "b599c64357f6b8404c152a30caXXX", user_key: "819c717f5bd0d3123e248a1e431XXX",update_description:lane_context[SharedValues::FL_CHANGELOG])
  
  puts "开始上传FIR"

  firim(firim_api_token: "e69b09d037ca9979007e545a2b67XX",app_changelog:lane_context[SharedValues::FL_CHANGELOG]) 

  end

changelog_from_git_commits是为了在打包前获取git提交信息,然后在上传到蒲公英的时候取出来,作为更新信息填入进去。

cocoapods命令是在打包前执行pod install,如果需要这个命令,还需要在上面之前提到的Gemfile里增加一行gem "cocoapods"才能生效。

还需要注意workspace,这个看你项目是使用.xcworkspace还是.xcodeproj,之前没注意写错了,一直报错找不到pod的三方库。

上传到蒲公英或Fir

以下是安装两个插件的命令,然后去平台上找到相应的key即可

代码语言:javascript复制
fastlane add_plugin pgyer
#安装fir
fastlane add_plugin firim

通知相关人员

打包完成后需要通知到相关人员,可以通过邮件或企业微信,钉钉等其他方式。我用的是推到企业微信,在fastlane上可以配置,但是我这里直接在蒲公英上配置webhook的,fir同理。关于webhook,在企业微信或钉钉的群里,可以增加一个机器人,然后会生成一个webhook。

总结

以上流程算是比较简单快捷的,最多几个小时就配置好了,当然这只是一个简单示例,还可以配置相当多的东西,比如上传到商店等。整个过程中可能会出现很多问题,大部分都能在网上找到,如果实在找不到,可以评论留言,可能我也遇到过。

jenkins开始打包大概率会报的两个错

出现fastlane requires your locale to be set to UTF-8.警告

环境变量里面设置 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8,我在jenkins的环境配置和本机的.zshrc.bash_porfile文件里都有设置。

出现 fastlane: command not found

这个情况一般是由于 jenkins 没有设置正确的 PATH,在命令行输入

代码语言:javascript复制
echo $PATH

记录下输出的结果 在 jenkins 中系统管理-系统设置中,找到 环境变量(Environment variables) 在 key 中填写 PATH,在 value 中填写第一步中输出的结果 保存即可。如下图所示

参考资料

[1]

Gitlab Jenkins搭建持续集成系统: https://rorschachchan.github.io/2018/05/25/Gitlab-Jenkins搭建持续集成系统/

0 人点赞