Jenkins + fastlane

背景

随着我司短视频业务的不断发展,人力的增加,业务量成指数增长。

如此多的业务,使得传统的代码集成方式、送测频率已经远远不能满足接下来的业务需求。

传统代码集成方式:

搜索插件

存在的问题

1.Bug总是在最后才出现。

2.越到项目后期,问题越难解决。

3.软件交付时机无法保障。

4.程序经常需要变更。 某些项目中,程序会经常需要变更,特别是敏捷开发实践者。

5.无效的等待变多。 开发在等待集成其他人的模块,测试人员在等待开发修复Bug,产品经理在等待新版本上线给客户做演示,项目经理在等待其他人提交代码。

6.用户的满足度低。

那我们应该如何解决这种问题呢?

持续集成:

搜索插件

一、持续集成的好处

1.解放了重复性劳动。 自动化部署工作可以解放集成、测试、部署等重复性劳动,而机器集成的频率明显比手工高很多。

2.更快地修复问题。 持续集成更早的获取变更,更早的进入测试,更早的发现问题,解决问题的成本显著下降。

3.更快的交付成果。 更早发现错误减少解决错误所需的工作量。集成服务器在构建环节发现错误可以及时通知开发人员修复。集成服务器在部署环节发现错误可以回退到上一版本,服务器始终有一个可用的版本。

4.减少手工的错误。 在重复性动作上,人容易犯错,而机器犯错的几率几乎为零。

5.减少了等待时间。 缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间可以出现的等待时机。持续集成,意味着开发、集成、测试、部署也得以持续。

6.更高的产品质量。 集成服务器往往提供代码质量检测等功能,对不规范或有错误的地方会进行标致,也可以设置邮件和短信等进行警告。

二、iOS 持续集成的原理

1、通过 Jenkins 作为一个触发器,捕捉 push 等操作或者定时,触发打包动作

2、GIT plugin 进行项目源码管理

3、通过 fastlane 进行打包

4、通过 pgyer (蒲公英) 平台进行分发,通知相应负责人

Part 1 - Jenkins

Jenkins 是什么?

Jenkins是开源 CI(Continuous Integration)& CD (Continuous Delivery)软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

一、准备

1、安装Java

a. 安装 java sdk

2、安装Jenkins

a. Download Jenkins

3、安装Cocoapods

a. 安装 Cocoapods

4、安装fastlane

a. 安装 fastlane

b.安装fastlane的pgyer插件,versioning插件

5、启动

a.正常回自动启动。如未启动,执行 /Library/Application Support /Jenkins下的 jenkins-runner.sh 启动jenkins

二、安装推荐插件、创建用户

1、输入密码

搜索插件

2、 安装插件

搜索要安装的插件,并安装

搜索插件

3、安装过程

搜索插件

4、创建用户

搜索插件

三、切换启动方式

上述步骤结束后,实际上我们已经成功搭建好了一套jenkins系统。

但是当前用户非当前主机用户,在pod update\pod install,fastlane的使用上,会碰到各种各样的权限问题(**雨打沙滩,万点坑!!!…)。故,不推荐用jenkins默认的启动方式,建议切换成当前主机的服务、主机用户

a. 关闭当前服务

b. 切换、并启动Mac主机自己的服务。

1、关闭jenkins当前服务

两个命令

a.启动或者重启jenkins服务

sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

b. 停止jenkins服务

sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

故,我们执行b就可以停止当前jenkins服务了。

2、启动本地服务

a. cd 进入到 Jenkins 的 war 包所在目录

b. 执行 java -jar jenkins.war

如无意外,已经启动了jenkins。可以访问 http://localhost:8080/

搜索插件

四、创建New Item

1、新建Job

搜索插件

五、参数配置

1、general

随便填

搜索插件

也可添加一些配置参数

搜索插件

2、Source Code Management

a.gittab找到对应的代码拉取地址

b.gitlab配置当前Mac电脑的ssh公钥

c.添加用户,Credentials 选择当前用户 (我自己的电脑显示/****,另一台显示用户名,有细微差异)

d.填入当前用户私钥

搜索插件
搜索插件
搜索插件

配置完成后,如果有问题,会有红色文字警告描述。如果没问题,将不会出现红色警告文字

接下来可以测试一下。

搜索插件

3、Build Triggrers

常用Poll SCM

搜索插件

Examples:

# every fifteen minutes (perhaps at :07, :22, :37, :52)
H/15 * * * *
# every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24)
H(0-29)/10 * * * *
# once every two hours at 45 minutes past the hour starting at 9:45 AM and finishing at 3:45 PM every weekday.
45 9-16/2 * * 1-5
# once in every two hours slot between 9 AM and 5 PM every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM)
H H(9-16)/2 * * 1-5
# once a day on the 1st and 15th of every month except December

触发打包频率太过频繁,建议暂时不用

4、Build Environment 暂时可以不填入

搜索插件

5、Build

这一步骤非常重要,核心功能都写在这里

a. 选择 Add build step

b. 选择 Excute shell

搜索插件

c.写入脚本,内容如下:

#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

echo "🌍 start pod update 🌍 ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡️"
/usr/local/bin/pod update

echo "🌍 merge new plist parameters (channel), add build number 🌍 ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡️"
python ./tools/plist_config.py -p ./KaliKali/Test/Info-Test.plist -c "{\"channel\": \"${channel}\", \"CFBundleVersion\":\"${BUILD_NUMBER}\"}"

echo "🌍 remove ipa file & remove dSYM.zip file 🌍 ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡️"
rm -rf *.ipa
rm -rf *.app.dSYM.zip

echo "🌍 start fastlane  🌍 ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡️"
/usr/local/bin/fastlane test build_number:${BUILD_NUMBER}

Part 2 - Fastlane

一、准备

1、安装 ruby 环境

a.(Mac 默认已安装、只要版本匹配就ok)

2、安装 Xcode

b. 依赖Xcode

3、安装 fastlane

二、初始化

1、项目根目录执行

fastlane init

新版本安装的时候出现了下面的分支选择,按要求选择就行

1\. 📸  Automate screenshots
2\. 👩‍✈️  Automate beta distribution to TestFlight (自动testfilght型配置)
3\. 🚀  Automate App Store distribution (自动发布型配置)
4\. 🛠  Manual setup - manually setup your project to automate your (需要手动配置内容)

选择 2 即可

2、fastlane配置文件

fastlane操作改变后我们再了解一下有哪些配置文件:

Appfile: 存储有关开发者账号相关信息

Fastfile: 核心文件,主要用于 命令行调用和处理具体的流程,lane相对于一个方法或者函数

Pluginfile: 插件的配置文件

除开手动配置项,fastlane 会要求填写Apple ID,选择你的Team(如果有多个) 然后fastlane会自动检测当前目录下项目的App Name和App Identifier、Project。然后自行确认并按流程执行。

3、fastlane安装插件

a. gym

fastlane gym

b.versioning

fastlane add_plugin versioning

c.pgyer(可不安装、用Jenkinspgyer插件也可实现)

fastlane add_plugin pgyer

三、使用fastlane

1、Development 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
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

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

default_platform(:ios)

platform :ios do
  desc "fastlane begin, good luck. 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀"

  lane :test_flight do |options|

   increment_build_number(
        build_number: options[:build_number]
      )

    gym(codesigning_identity:"iPhone Developer: Adlina Martha (HTY5XFD9DT)",
        scheme: "KaliKali",
        export_method:"app-store",
        configuration: "Release", 
        workspace: "KaliKali.xcworkspace",
        silent: true, 
        output_name: "KaliKali_#{options[:build_number]}.ipa"
      ) 

    upload_to_testflight

    desc "fastlane finished. 🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱"

  end

  lane :formal do |options|

    increment_build_number(
        build_number: options[:build_number]
      )

    gym(codesigning_identity:"iPhone Developer: Adlina Martha (HTY5XFD9DT)",
        scheme: "KaliKali",
        export_method:"development",
        configuration: "Release", 
        workspace: "KaliKali.xcworkspace",
        silent: true, 
        output_name: "KaliKali_#{options[:build_number]}.ipa"
        ) 

    pgyer(api_key: "7bb10f70cd56cb2541b3c694916edb79", 
        user_key: "344c3b7525ae35bbc9427112392ccf05"
        )
    desc "fastlane finished. 🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱"

  end

  lane :test do |options|

    increment_build_number(
      build_number: options[:build_number]
    )

    gym(codesigning_identity:"iPhone Developer: Adlina Martha (HTY5XFD9DT)",
        scheme: "KaliKaliTest",
        export_method:"development",
        configuration: "Release", 
        workspace: "KaliKali.xcworkspace",
        silent: true, 
        output_name: "KaliKaliTest_#{options[:build_number]}.ipa"
        ) 

    desc "fastlane finished. 🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱🎱"

  end

end

2、Testflight Fastfile

#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=fpus-kmgk-qjvt-aoto
export FASTLANE_SESSION=session cookie

echo "🌍 remove derivedata 🌍 ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡️"
pwd

rm -rf /Users/mc/Library/Developer/Xcode/DerivedData

echo "🌍start pod update 🌍 ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡️"

/usr/local/bin/pod update

echo "🌍start fastlane  🌍 ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡️"

python ./tools/plist_config.py -p ./KaliKali/Info.plist -c "{\"channel\": \"${channel}\", \"CFBundleVersion\":\"${BUILD_NUMBER}\"}"
rm -rf *.ipa
rm -rf *.app.dSYM.zip

/usr/local/bin/fastlane spaceauth -u developer@kalikali.com

/usr/local/bin/fastlane test_flight build_number:${BUILD_NUMBER}

四、配合Jenkins使用

1、Jenkins build

Jenkins 的 build

</article>

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