Mac下使用Jenkins踩坑 Fastlane自动化iOS打包写在前面使用FastlaneJenkins 踩坑后记

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

操作系统之内存管理内存管理3.1 内存管理的概念3.2 内存覆盖与内存交换3.3 内存连续分配管理方式3.4 内存非连续分配管理方式

71760
来自专栏java一日一条

RESTful API 最佳实践

在参考了GitHub API设计和大量博客文章后总结了一下RESTful API的设计,分享如下。想要更好的理解RESTful API首先需要理解如下概念:

68420
来自专栏小狼的世界

在Codeigniter框架中使用NuSOAP

NuSOAP 是一组功能强大的PHP类,这个工具的发布让使用和创建SOAP消息变得相当简单。 NuSOAP有Dirtrich Ayala编写,可以无缝的与许多最...

10510
来自专栏BinarySec

Windows x64上的x86重定向

0x00 背景 搬砖过程中遇到一个很奇怪的现象。写了一个程序利用命令regedit来读取注册表的某项值,出现了一个奇怪的现象:在某些电脑上能读到值,在另一些电脑...

39480
来自专栏cloudskyme

JAVA高性能I/O设计模式

同步阻塞模式。在JDK1.4以前,使用Java建立网络连接时,只能采用BIO方式,在服务器端启动一个ServerSocket,然后使用accept等待客户端请求...

19020
来自专栏cs

使用WinHex

winhex 是一个专门用来对付各种日常紧急情况的工具。它可以用来检查和修复各种文件、恢复删除文件、硬盘损坏造成的数据丢失等。同时它还可以让你看到其他程序隐藏起...

43770
来自专栏Python

Linux权限详解 命令之 chmod:修改权限

在这种使用方式中,首先我们需要了解数字如何表示权限。 首先,我们规定 数字 4 、2 和 1表示读、写、执行权限(具体原因可见下节权限详解内容),即 r=4,w...

51020
来自专栏Python爬虫与数据挖掘

如何在虚拟机上安装centos7.4系统—靠谱的centos7.4系统安装教程

前几天给大家分享了在虚拟机上安装Centos6.7系统的教程,感兴趣的童鞋们可以点击进去查看。今天小编给大家分享在虚拟机上安装Centos7.4...

13420
来自专栏个人分享

Spark数据传输及ShuffleClient(源码阅读五)

  我们都知道Spark的每个task运行在不同的服务器节点上,map输出的结果直接存储到map任务所在服务器的存储体系中,reduce任务有可能不在同一台机器...

13730
来自专栏Linyb极客之路

分布式配置中心之Apollo简易环境部署

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治...

29820

扫码关注云+社区

领取腾讯云代金券