在CLI中调用Fastlane时如何获取其输出变量到shell环境
问题解答:shell环境运行fastlane后获取输出变量并导入当前环境的方法
结论
可以实现需求。默认状态下fastlane作为shell调用的子进程,无法直接修改父shell的环境变量,我们可以通过输出约定格式内容、临时文件中转两种方案实现变量导出和导入。
方案1:输出约定前缀内容+eval直接导入
适合变量少、fastlane输出内容可控的场景
- 第一步:修改Fastfile对应lane,在执行末尾打印你需要导出的变量,统一加固定前缀避免和其他输出混淆,示例代码:
lane :build_app do # 你的原有打包/执行逻辑,比如调用gym、deliver等action gym(...) # 末尾输出需要导出的变量,统一加FASTLANE_EXPORT_前缀 puts "FASTLANE_EXPORT_BUILD_VERSION=#{lane_context[SharedValues::BUILD_VERSION]}" puts "FASTLANE_EXPORT_IPA_PATH=#{lane_context[SharedValues::IPA_OUTPUT_PATH]}" end
- 第二步:shell中执行fastlane时用grep匹配固定前缀的输出,通过eval导入到当前环境:
eval $(fastlane build_app | grep "FASTLANE_EXPORT_")
执行完成后你就可以在当前shell直接使用$BUILD_VERSION、$IPA_PATH这两个变量了。
方案2:临时文件中转+source导入
适合变量多、需要更稳定导入逻辑的场景
- 第一步:修改Fastfile对应lane,在执行末尾把需要导出的变量写入临时shell脚本:
lane :build_app do # 你的原有打包/执行逻辑 gym(...) # 写入临时变量文件 File.open(".fastlane_temp_env", "w") do |file| file.write "export BUILD_VERSION=\"#{lane_context[SharedValues::BUILD_VERSION]}\"\n" file.write "export IPA_PATH=\"#{lane_context[SharedValues::IPA_OUTPUT_PATH]}\"\n" # 有更多需要导出的变量都可以按这个格式追加 end end
- 第二步:shell中按顺序执行以下命令即可完成导入:
fastlane build_app source .fastlane_temp_env # 可选操作:用完后删除临时文件避免残留 rm .fastlane_temp_env
注意事项
- 所有导出操作本质都是父shell主动读取fastlane输出的内容执行导入,fastlane作为子进程本身没有权限直接修改父shell的环境变量,不存在跳过这一步直接写入的方法
- 如果需要导出fastlane内置的环境变量,直接在lane中读取
ENV['对应内置变量名']按上面的方法导出即可
内容的提问来源于stack exchange,提问作者neatchuck
相关产品推荐
相关产品推荐

