Mac下使用Jenkins踩坑 Fastlane自动化iOS打包

4,109 阅读6分钟

2018.4.17更新: 解决MAC下使用pkg安装权限问题

踩坑记录 Fastlane+蒲公英+Jenkins fastlane command not found mac下Jenkins 主目录导致的权限问题

写在前面

本文同步博客,掘金,简书

最近项目在做新项目时经常发现有很多小bug需要改动,一改就要重新打包,哪怕是一个很小的项目,光是编译打包导出,再上传到测试平台没个十几分钟也是下不来的。本来的话也只是想找个自动打包的脚本,找了几个发现都不怎么理想,于是就瞄准了 Jenkins + Fastlane

Jenkins是用于管理,如果只需要打包的话Fastlane就足够了

本文也主要是记录自己踩的坑,而且大部分是来自于Jenkins的, 有兴趣的童靴可以继续往下看~

当前环境

名称 版本
macOS 10.13.4
Xcode 9.3
ruby 2.4.0
fastlane 2.91.0

使用Fastlane

先说说Fastlane,毕竟Jenkins是持续化管理的,相信很多小伙伴的初衷也只是想要自动化的快速快速编译打包,省去漫长等待而已

准备工作

  • 安装RVM 使用rvm来管理ruby环境,macOS虽然有自带的ruby环境,但是会出现各种权限问题 安装完成后记得 使用 source ~/.rvm/scripts/rvm 完了后 关闭终端跑一下rvm -v看看是否正常 如果出现command not found那就是有问题了, 具体情况需要具体分析还是google吧

  • 安装ruby 有了rvm安装后 直接安装ruby 安装好后 执行which ruby 看看ruby是否由rvm管理

如果显示为 /Users/xxxxxx/.rvm/rubies/ruby-2.4.0/bin/ruby 那就可以了

  • 安装fastlane 上面都搞定后执行安装命令 gem install fastlane -NV

至此,我们已经可以使用fastlane自动化打包了

准备打包

  • cd 到工程主目录
  • 执行fastlane init 我这里选择的是手动配置
  • 执行fastlane add_plugin pgyer 安装蒲公英插件

编辑Fastfile

# 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
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:ios)

platform :ios do
desc "上传到测试版本到蒲公英"
  desc "生成本地版本"
  lane :topgyer do|option|
    
    #自动增加build
    # increment_build_number

    #自动生成证书
#cert

    #自动生成配置文件
#sigh(force: true)//我使用的是手动配置关闭这个。如需自动则打开即可

    #gym配置,打包输出。

    #fastlane gym --export_method ad-hoc
    #fastlane gym --export_method enterprise
    #fastlane gym --export_method app-store
    scheme_name = "你的scheme名字"

    #获取version和build版本号
    version = get_info_plist_value(path: "./#{scheme_name}/Info.plist", key: "CFBundleShortVersionString")
    build = get_info_plist_value(path: "./#{scheme_name}/Info.plist", key: "CFBundleVersion")
    
    #导出路径
    output_directory = "./build"
    
    #导出名称
    output_name = "#{scheme_name}_#{version}_#{build}_#{option[:desc]}_#{Time.now.strftime('%Y%m%d%H%M%S')}.ipa"

    gym(
      export_method: "ad-hoc",     #这里填写导出方式,我使用的是ad-hoc
    export_xcargs: "-allowProvisioningUpdates",
    export_options:{
       provisioningProfiles: {
           "cn.com.kkk" => "iPhone Distribution: kkk. (77777XXRRR)"
       }
},
      scheme: scheme_name,
      clean: true,
      output_directory: output_directory,
      output_name: output_name
     )

    pgyer(api_key: "11111122222233333444444", user_key: "111122233344455555", update_description: "#{option[:desc]}")
end
end

回到项目项目主目录 执行fastlane topgyer desc:更新

编译完成后就会自动上传到蒲公英

Jenkins 踩坑

Mac 下的 Jenkins真是一个大坑了。 重复过多种安装方法来进行构建,一会是github拉不到代码,一会又是fastlane command not found ,又或者是报了一堆ruby的错误,心累啊。

最后尝试了各种方法 总算是有点眉目了

pkg安装

首先我们说说最坑爹的pkg安装

Jenkins下载 LTS的macOS版本,很方便 直接是一个.pkg文件,安装一下。

但是安装后会直接启动jenkins的web站,然后你会发现jenkins的目录是默认安装/Users/Shared/jenkins的(就是共享文件夹),也就是在你的用户目录之外, 接下来等你安装完成后一构建就是各种报错。。。

所以。。。

不要使用pkg安装。。。。

2018.4.17更新

需要注意的是安装时不使用Shared用户 (当然用了也无妨)

自定义

把share用户关闭 防止权限问题

取消jenkins用户

安装完成后就会发现秘钥就也在用户目录下了

如果忘记勾选了你会发现秘钥的位置是在shared/jenkins目录下。 没关系,设置里面删掉用户,shared 中 把jenkins 目录删了 回到Finder的Application,找到Jenkins文件夹 双击jenkins.jar

继续回到localhost:8080中也能看到秘钥地址回到用户目录下了

接下来就是正常的安装插件和语言。

由于本地使用rvm来管理ruby,也是深坑一大堆,构建时会出现这些报错。

找了很多方法 原因大概是ruby的问题,加过全局变量,还是不行

最后发现,其实很简单。。。一个插件搞定。 插件管理中搜索 rvm

rvm插件

安装完成后 在项目配置的构建环境中选择rvm的ruby版本就行了。。

选择ruby版本

接下来就可以愉快的构建了。

命令行安装

brew install jenkins

后端执行 nohup java -jar /usr/local/Cellar/jenkins/版本号/libexec/jenkins.war --httpPort=8080 &

接着 新开一个终端执行 open /Library/LaunchDaemons 新建一个plist文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>StandardOutPath</key>
    <string>/var/log/jenkins/jenkins.log</string>
    <key>StandardErrorPath</key>
    <string>/var/log/jenkins/jenkins.log</string>
    <key>EnvironmentVariables</key>
    <dict>
      <key>JENKINS_HOME</key>
      <string>/Users/leon/Documents/FuckingJenkins/Jenkins/Home</string>
    </dict>
    <key>GroupName</key>
    <string>daemon</string>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>org.jenkins-ci</string>
    <key>ProgramArguments</key>
    <array>
      <string>/bin/bash</string>
      <string>/Library/Application Support/Jenkins/jenkins-runner.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>UserName</key>
    <string>jenkins</string>
    <key>SessionCreate</key>
    <true/>
  </dict>
</plist>

接着更改plist的权限 sudo chown root:wheel /Library/LaunchDaemons/org.jenkins-ci.plist

最后执行启动jenkins sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

回到localhost:8080

Screen Shot 2018-04-16 at 3.54.19 PM.png

直接查看密码 输入 进入安装插件界面。

安装完成后,先去插件管理中 安装个 汉化

Screen Shot 2018-04-16 at 4.07.07 PM.png

配置一下中文

Screen Shot 2018-04-16 at 4.08.07 PM.png

接下来就是正常创建项目了。

create

这里可以直接填写托管平台的账号的密码,或者使用sshkey

执行脚本

这里就直接执行fastlane命令就可以

shell

至此就足够了。

点击立即构建,查看控制台,所有的日志都会打印出来。

等待成功就ok了

后记

踩了好几遍的坑 对于pkg的安装一直不死心,来来回回重装了好几遍。最终还是放弃了。还是老老实实用jar

参考文章:

https://www.jianshu.com/p/dc6f3fea7aa9 https://www.jianshu.com/p/3b4a131653e0