jenkins fastlane淌坑记录

2023-11-03

前言

刚开始是按照某博客配置的,博客直接用的xcodebuild打包,证书也是通过jenkins来管理,但打包总是有问题,大概率跟证书有关,调了好长时间,不行,后续突然想起来了还有fastlane,fastlane真牛逼,但看文档个人感觉有些累人

管理证书

fastlane提供有match命令来轻松的管理证书,这么牛X的东西Fastlane的官方文档竟然没有单独开一个篇幅来介绍(或许是我没有找到)。哎,在这里浪费了太多的时间。附上fastlane之使用match同步证书和配置文件

使用证书

很多文档介绍了match的用法,但想找到在Fastfile如何使用,又是一关。下面附上我拼凑到的

match(
	type: "adhoc", # 使用哪种证书,共四种值:development/adhoc/distribution/appstore
	app_identifier: "com.xxx.xxx", 
	keychain_password: 'xxxx' # 不管是使用match配置和使用证书都需要密码,建议都配置成一个,好像是用于加密解密证书的一个秘钥
)

在jenkins上打包有时会碰到让设置MATCH_PASSWORD,这个内容跟上文提到的keychain_password一致,配置方式如下

before_all do
    ENV["MATCH_PASSWORD"] = 'xxx'
end

关于MATCH_PASSWORD,也可以直接放在环境变量中,但在jenkins环境下有时可能不管用,此时就需要在fastfile里按照上面方法配置

构建命令

构建算这里面最简单的了,直接贴上我的,更多的配置查看文档
iOS构建build appandroid构建gradle,android记得在项目中的build gradle配置realease版本的签名文件

# iOS
build_app(
	workspace: "./ios/xxx.xcworkspace",
	configuration: "Release",
	scheme: "xxx",
    silent: true,
    clean: true,
    export_method: "ad-hoc",
    output_directory: "/Users/wlg/work/xxx/dist/ios"
)
# android
gradle(
    project_dir: "/Users/wlg/work/xxx/android",
    gradle_path: './gradlew',
    task: 'assemble', 
    build_type: 'debug',
    print_command: true,   
);

关于app托管

  1. 最开始使用的是jenkins的firim插件,不能用,咨询官方后,人家说已经暂停维护了
  2. 随后使用的是fir-cli然后在jenkins中执行fir命令,高高兴兴的用了一段时间,但突然某一天,竟然无法上传app了,头疼。附上fir文档
  3. 最后使用的是fastlane的firim插件来上传,但好像也不太稳定,附上文档
  4. 该做的都做了,再上传不了就只能手动上传了

iOS的版本自增

increment_build_number({
  build_number: latest_testflight_build_number + 1,
  xcodeproj: './ios/xxx.xcodeproj',
})

latest_testflight_build_number这是获取testflight上的最新build号,否则每次打包都要提交一下自动修改后的版本号

testflight上传

upload_to_testflight(
   skip_waiting_for_build_processing: true
)

在将apk上传到testflight后,苹果会对该apk进行检验,如果不加skip_waiting_for_build_processing: true,在苹果检验(时间不可控,可能长可能短)没有结果之前该脚本会一直在等待,无法执行后续任务。

fastlane下苹果的账号验证问题

主要是MATCH_PASSWORDFASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD问题
传送门

iOS缓存问题

fastlane 有个clear_derived_data专门处理这个问题

iOS每次打包都会生成几个G的缓存文件,太痛苦了

iOS打包会开启8081服务

sh("((lsof -t -i:8081) && (kill -9 `lsof -t -i:8081`) || pwd)")

iOS每次打包都会开启RN的8081服务,第二次打包需要关闭该8081服务,就诞生了这个脚本

fastlane获取最新代码

之所以这么搞是因为我在我电脑上配置的jenkins隔山差五出问题(比如证书某天突然让你输入什么密码),心累了。就直接摆脱了jenkins,全部用fastlane搞了

sh('git fetch')
hash=sh("git rev-parse refs/remotes/origin/master^{commit}")
sh("git checkout -f #{hash}")

Fastlane完整代码

# iOS
default_platform(:ios) 
platform :ios do
  desc "ios adhoc"
  before_all do
    ENV["MATCH_PASSWORD"] = 'xxx'
    ENV["FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"] = "xxx"
  end
  lane :adhoc do |op|

    sh("((lsof -t -i:8081) && (kill -9 `lsof -t -i:8081`) || pwd)")

    sh('git fetch')
    hash=sh("git rev-parse refs/remotes/origin/master^{commit}")
    sh("git checkout -f #{hash}")
    sh('yarn install')
    
    cocoapods(
      podfile: "./ios/Podfile"
    )

    # type供四种: appstore/adhoc/enterprise/development
    match(type: "adhoc", app_identifier: "xxx", keychain_password: 'xxx', force_for_new_devices: true)
    build_app(
        workspace: "./ios/xxx.xcworkspace",
        configuration: "Release",
        scheme: "xxx",
        silent: true,
        clean: true,
        export_method: "ad-hoc",
        output_directory: "./dist/ios"
    )
    fir_cli(
      api_token: "xxx", 
      specify_file_path: "./dist/ios/xxx.ipa",
      changelog: 'adhoc',
      need_release_id: true,
    )

    clear_derived_data
  end

  lane :testflight do |op|

    sh("((lsof -t -i:8081) && (kill -9 `lsof -t -i:8081`) || pwd)")

    sh('git fetch')
    hash=sh("git rev-parse refs/remotes/origin/master^{commit}")
    sh("git checkout -f #{hash}")
    sh('yarn install')

    cocoapods(
      podfile: "./ios/Podfile"
    )

    # type供四种: appstore/adhoc/enterprise/development
    match(type: "appstore", app_identifier: "xxx", keychain_password: 'xxx', force_for_new_devices: true)

    # UI.message(latest_testflight_build_number) UI.message可以打印日志
    increment_build_number({
      build_number: latest_testflight_build_number + 1,
      xcodeproj: './ios/xxx.xcodeproj',
    })

    build_app(
        workspace: "./ios/xxxx.xcworkspace",
        configuration: "Release",
        scheme: "xxx",
        silent: true,
        clean: true,
        export_method: 'app-store',
        output_directory: "./dist/ios"
    )
    upload_to_testflight(
      skip_waiting_for_build_processing: true
    )

    clear_derived_data
  end

end

default_platform(:android) 
platform :android do
  desc "android Debug"
  
  lane :debug do |op|

    sh('git fetch')
    hash=sh("git rev-parse refs/remotes/origin/master^{commit}")
    sh("git checkout -f #{hash}")
    sh('yarn install')
    
    gradle(
      project_dir: "./android",
      gradle_path: './gradlew',
      task: 'assemble', 
      build_type: 'Debug',
      print_command: true,   
    );
    fir_cli(
      api_token: "xxx", 
      specify_file_path: "./android/app/build/outputs/apk/debug/app-debug.apk", 
      changelog: 'debug',
      need_release_id: true,
    )
  end

  lane :release do |op|

    sh('git fetch')
    hash=sh("git rev-parse refs/remotes/origin/master^{commit}")
    sh("git checkout -f #{hash}")
    sh('yarn install')

    gradle(
      project_dir: "./android",
      gradle_path: './gradlew',
      task: 'assemble', 
      build_type: 'Release',
      print_command: true,   
    );
    fir_cli(
        api_token: "xxx", 
        specify_file_path: "./android/app/build/outputs/apk/release/app-release.apk", 
        changelog: 'release',
        need_release_id: true,
    )
  end

end

mac上jenkins打包出现Java heap space

目前分析有如下两种原因:

  1. 电脑硬盘空间小只有120G,删了很多文件才腾出12个G左右的空闲空间

  2. 分配给jenkins的空间小,我这里使用jenkins启动给分配的空间是2G,不够用,后来在网上找资料都是在说linux上的处理方法试验后发现在mac上都无效,后续找JAVA的同事分析说自动的时候可以指定空间,然后就有了如下这个操作

    alias jenkinsJVM4G="/usr/local/opt/openjdk@11/libexec/openjdk.jdk/Contents/Home/bin/java -jar -Xmx4096m  /usr/local/Cellar/jenkins/2.251/libexec/jenkins.war"
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jenkins fastlane淌坑记录 的相关文章

随机推荐

  • SSE2的一些常用指令集介绍

    开门见山 前段时间学习OpenCV的FAST算法 中间有很多SSE2的指令集 深受其惑 下面我把学习过程中学到的一些指令集介绍给大家 希望能对大家有所帮助 m128i被称为128bits的整数 对其进行赋值时 可以调用 m128i mm s
  • MMKV原理详解

    性能对比 我们将 MMKV 和 SharedPreferences SQLite 进行对比 重复读写操作 1k 次 相关测试代码在Android MMKV mmkvdemo 结果如下图表 单进程性能 可见 MMKV 在写入性能上远远超越 S
  • 三、nginx两种压缩配置[gzip]

    一 nginx压缩 解释 通过配置参数 让nginx压缩指定后缀格式文件 然后发送给用户 但是这样这些压缩文件无法使用sendfile的高效传送 使用其能使得文件传输不经过程序 加载到缓存直接发送 相反off的话 需要在硬盘 缓存 程序 发
  • [Python人工智能] 十四.循环神经网络LSTM RNN回归案例之sin曲线预测

    从本专栏开始 作者正式开始研究Python深度学习 神经网络及人工智能相关知识 前一篇文章详细讲解了如何评价神经网络 绘制训练过程中的loss曲线 并结合图像分类案例讲解精确率 召回率和F值的计算过程 本篇文章将分享循环神经网络LSTM R
  • java文件的上传和下载_java文件上传和下载

    在web项目中上传文件夹现在已经成为了一个主流的需求 在OA 或者企业ERP系统中都有类似的需求 上传文件夹并且保留层级结构能够对用户行成很好的引导 用户使用起来也更方便 能够提供更高级的应用支撑 文件夹数据表结构 CREATETABLEI
  • 注解-宋红康

    目录 一 注解 Annotation 概述 二 常见的注解实例 三 如何自定义注解 四 JDK中的四个元注解 五 Java8注解的新特性 1 可重复注解 2 类型注解 一 注解 Annotation 概述 二 常见的注解实例 三 如何自定义
  • Android开发入门组件(十)——WebView

    今天主要写一下WebView 主要是在安卓应用的页面来加载或者写入网页 是比较常见的一种操作 加载网页 1 加载url 网络或者本地assets文件下的html文件 1 加载网络url webview loadUrl 相应的网址 直接在ac
  • 从外包辞职了,600小时后,我入职了字节跳动

    前言 没有绝对的天才 只有持续不断的付出 对于我们每一个平凡人来说 改变命运只能依靠努力 幸运 但如果你不够幸运 那就只能拉高努力的占比 2022年7月 我有幸成为了字节跳动的一名Java后端开发 相信同行都清楚 从外包进大厂有多难 运气之
  • c# --- 泛型解决输入和输出类型不确定问题

    一 背景 有这样一个需求 一个方法 他的返回值类型不确定 方法参数的类型不做要求 二 思考 返回值类型不确定 从继承的角度 所以类都是object的子类 返回object即可 但是这种方法是类型不安全的 需要进行类型转换 我们可以使用泛型解
  • HTML <small> 标签

    定义和用法
  • CUBLAS矩阵乘法

    include
  • Winsock属性 方法介绍

    本文章已收录于 Winsock是Mcrosoft windows提供的网络编程接口 它供了基于TCP IP协议接口实现方法 通过网络进行的数据通信 需要用地址来表示网络中的主机 TCP IP协议使用IP地址来作为主机的标识 实现的连接方式是
  • 关于connect: network is unreachable 问题的解决

    由于发现原创文章 在未署名作者及出处的情况下被转载 在以后所有的原创文章开头我都会写明作者和出处 希望朋友们以后在转载本博客原创博文时注意标明文章作者及出处 作者 liukun321 咕唧咕唧 原文出处 http blog csdn net
  • 牛客面试题库(9)

    请你说说索引怎么实现的B 树 为什么选这个数据结构 说到B 树 一般和B树做对比 都是多叉树 B 数组叶子结点存储数据 其他节点存储索引 而B树每个节点都存储数据 B 树叶子结点内通过单向链表连接 节点和节点之间通过双向链表连接 从磁盘IO
  • 匿名内部类的定义格式

    匿名内部类 1 使用条件 如果接口的实现类 或者父类的子类只需要使用唯一的一次 那么就可以省略该类的定义 改用匿名内部类 2 定义格式 接口名称 对象名 new 接口名称 覆盖重写所有抽象方法 分号不要忘 3 对匿名内部类的格式 new 接
  • springboot + mybatis启动时执行sql脚本

    目录 1 创建数据版本表 结构如下 2 创建HdVersion对象 3 创建执行sql的dao 4 创建dao对应的xml 5 创建sql执行器 实现ApplicationRunner 6 结语 背景 项目开发或发布阶段修改表结构 项目更新
  • 大数据平台测试-白盒测试静态方法解析(我奶奶都能看懂)

    软件测试从某种维度上分为黑盒测试和白盒测试 黑盒测试更多的是增啥改查 也就是功能测试 关于功能测试参考这里 增删改查测试场景 菜市场的大妈都能看懂 关于白盒测试的资料参考这里 白盒测试案例设计 我爷爷都能看懂 注意并不是说白盒测试一定就是要
  • 还不会python 实现常用的数据编码和对称加密?看这篇文章就够啦~

    前 言 相信很多使用 python 的小伙伴在工作中都遇到过 对数据进行相关编码或加密的需求 今天这篇文章主要给大家介绍对于一些常用的数据编码和数据加密的方式 如何使用 python 去实现 话不多说 接下来直接进入主题 1 base64
  • Unity—关节、布料、角色控制器、视频播放

    开学啦 接下来学习Unity的寻路系统和射线 结尾有彩蛋呦 每日一句 少年特有的放浪不羁是青春的定义 目录 关节 布料 视频播放 Character Controller组件 关节 铰链关节 Hinge Joint 将两个刚体 Rigidb
  • jenkins fastlane淌坑记录

    目录 前言 管理证书 使用证书 构建命令 关于app托管 iOS的版本自增 testflight上传 fastlane下苹果的账号验证问题 iOS缓存问题 iOS打包会开启8081服务 fastlane获取最新代码 Fastlane完整代码