基于 Xcode 9+,利用fastlane+jenkins持续集成iOS项目

1,755 阅读3分钟

前段时间写了一篇关于"jenkins 持续集成 iOS项目"的文章,配置比较复杂.在更新到 Xcode 9以后,原来的配置方案不能用了.最近尝试用 fastlane+jenkins,继续实现持续集成. fastlane 是一个优秀的部署,发布应用的开源项目(github地址). 推荐使用 fastlane, 放弃使用 jenkins 里 Xcode-plugin 的原因: fastlane 多人维护,更新及时,部署简单. Xcode-plugin反之.

1:安装 fastlane:

官方版安装详细步骤 保证在 mac 上安装了最新版的 Xcode. 在Ruby 2.0.0及以上版本环境下安装:

sudo gem install fastlane -NV

然后,在终端进入你项目的根目录,执行以下代码:

fastlane init

由于 fastlane 版本更新迅速,高版本不向前兼容,推荐使用Gemfile,更新版本. 在终端执行命令,安装builder:

sudo gem install bundler

在你的项目根目录下创建Gemfile文件,文件写入以下内容:

source "https://rubygems.org"
gem "fastlane"
#如果使用 cocoapods管理项目依赖,增加下面的命令
#gem "cocoapods"

创建完后,在持续集成时执行命令:

bundle update
#如果第一次执行,用 bundle install 代替

接着编辑项目目录下的./fastlane/Fastfile文件内容(首先保证你的项目在 Xcode 中,已配置好证书和对应的描述文件):

Fastfile.png

lane :beta do
    gym(scheme: "AppScheme”,
    #output_name 指打包完成后, 输出ipa文件的名字
	output_name: "APPName_Debug”,
    #export_method 打包版本选择
    #分别是app-store、ad-hoc、development、enterprise
	export_method: "development”,
    	export_options: {
      	  provisioningProfiles: { 
          #左侧表示你的项目的bundle id
          #右侧表示你的项目在选择export_method后,对应的描述文件名字
          "com.test.appidentifer" => "ProfilesName"
        }
       }) 
  end

(还有一种官方推荐的 match 方法匹配证书和描述文件,由于笔者现在用企业版账号开发应用,不能随意撤销证书,所以没用 match 的方法.)

2:安装 jenkins:

在macOS系统上,我们需要先安装 JDK,然后在 Jenkins 的官网 下载最新的 war 包。

jenkins.png
下载完成后,打开终端,进入到 war 包所在目录,执行以下命令:

java -jar jenkins.war --httpPort=8080

待Jenkins启动后,在浏览器页面输入以下地址,打开 jenkins:

http://localhost:8080

注意:使用其他方式安装的 Jenkins 可能导致后续步骤失败,请确认使用推荐的方式来安装 Jenkins。

开始创建工程

CreatProject.png

配置仓库代码链接

SourceCode.png

添加执行的 shell 代码

ShellCode.png
shell 内容:

export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
#上面命令指定编码方式,如果不指定,执行 fastlane beta 会报错
bundle update
fastlane beta

最后,增加构建后操作步骤,选择 Archive the artifacts,可以将打包好的 ipa 呈现在当前页面,方便"测试同事"点击下载.点击"保存",然后开始构建项目.

artifacts.png

常见问题

出现 fastlane: command not found 怎么办? 解决方法一:这个情况一般是由于 jenkins 没有设置正确的 $PATH 环境变量导致的。正确设置的方法为: 在终端执行 echo $PATH,记录下输出的结果 在 jenkins 中系统管理-系统设置中,找到 环境变量(Environment variables) 在 key 中填写 PATH,在 value 中填写第一步中输出的结果 保存即可。

EnvironmentVariables.png

解决方法二:请确认你安装 Jenkins 的方式和本文中推荐的方式一致。使用其他方式安装的 Jenkins 也经常会出现此问题。 参考: fastlane官方教程 蒲公英官网:使用 Jenkins 实现持续集成 (iOS)