如何不开发自定义步骤实现Bitrise跨工作流步骤复用
完全不用开发独立自定义步骤,以下三种方案都能实现复用,且保证脚本对代码库的修改能被同工作流后续步骤正常读取:
方案1:抽取为工具类公共工作流
这是最省事的零改造成本方案。新建一个工作流,命名时建议开头加下划线(比如_common_code_modify),Bitrise会自动将其识别为工具类工作流,不会出现在手动触发的工作流列表里。把你写了大段Shell的Script步骤直接剪切到这个公共工作流中保存。
其他工作流需要用到这段逻辑时,直接插入内置的Run Workflow步骤,选择刚才创建的公共工作流即可。因为调用是在同一个构建虚拟机、同一个代码工作目录下执行,没有上下文隔离,脚本对代码做的所有修改、脚本内导出的环境变量,后续步骤都能直接访问。如果需要给脚本动态传参,在Run Workflow步骤的配置里添加要传入的环境变量就行,公共脚本里直接读取对应变量取值即可。方案2:托管脚本文件+单命令调用
如果不想把大段Shell存在Bitrise的页面配置里,适合用这个方法。把整段Shell逻辑存为独立的.sh脚本文件,可以选择托管在两个位置:- 放在当前项目代码库的固定CI目录下,比如
./ci/scripts/modify_code.sh - 单独建一个存储所有CI公共脚本的Git仓库,供所有项目拉取使用
需要复用时,只需要在任意工作流里加一个极简的Script步骤,写几行调用命令即可:
# 若脚本存在独立公共仓,先执行拉取逻辑,存在当前项目仓可直接执行 chmod +x ./ci/scripts/modify_code.sh ./ci/scripts/modify_code.sh这种方式的执行逻辑和直接把脚本贴在当前步骤完全一致,代码修改、环境变量都能正常透传给后续步骤,后续维护只需要改那一个sh文件,比在Bitrise网页编辑器里改大段脚本方便很多。
- 放在当前项目代码库的固定CI目录下,比如
方案3:用Step Bundle打包步骤组
如果你需要在同个Bitrise组织下的多个项目、多个工作流里复用这段脚本,可以新建一个Step Bundle,把配置好的带大段Shell的Script步骤直接添加到这个Bundle里。后续任意工作流需要用到这段逻辑时,直接插入对应Step Bundle即可,不用重复粘贴脚本内容。Bundle插入后会直接在当前构建上下文执行,代码修改、环境变量的透传效果和手动贴脚本完全一致,不需要开发符合官方规范的独立自定义步骤。
避坑提醒:不要用触发独立子构建的方式复用这段脚本。独立子构建会分配全新的虚拟机和独立的代码工作目录,脚本做的代码修改不会同步到父构建上下文,后续步骤无法读取到修改后的内容。所有复用方案都要保证脚本在当前构建的同一运行上下文内执行。
内容的提问来源于stack exchange,提问作者ror

