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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容