一、配置(以mac系统下android项目配置为例,其他系统参考https://docs.fastlane.tools/ )
- 下载:
brew install fastlane
- init:进入需要配置fastlane的项目目录,命令行执行
fastlane init
,执行成功标志:项目路径下出现fastlane文件夹,里面有四个文件。 - 由于fastfile仅能在utf-8下运行(否则会报错fastlane requires your locale to be set to UTF-8.),参考https://docs.fastlane.tools/getting-started/ios/setup/#set-up-environment-variables 进行设置
二、编写fastfile
- 路径:项目目录/fastlane/fastfile
- 基础功能编写:
- 语法:语法本身很简单,部分麻烦的操作还可以通过本地运行参考https://docs.fastlane.tools/actions/
- 示范:参考安卓音乐圣经下fastlane文档
- 其他说明:
- fastlane本身基于ruby语言,因此可以执行对应的ruby语句。换句话说,任何你需要执行的他默认没有的功能,甚至可以通过执行
System("shell命令")
的方式进行相应功能的调用。 - fastlane基础格式如下
default_platform(:android) //平台设置语句
platform :android do //平台设置语句
puts("开始静态代码检测"); //打印语句
gradle( //执行gradle方法
task: 'sonarqube',
properties: {
"Dsonar.projectKey" => "com.boostfield.musicbible",
"Dsonar.host.url" => "http://localhost:9000 ",
"Dsonar.login" => "705a58fb1e19b89eae2e74db40211917d8945a43",
}
);
puts("静态代码检测结束");
desc "上传生产环境的apk"
lane :uploadBeta do
filenamedev = "#{release_path}musicbible_#{version_name_dev}_dev_release.apk"
system "#{ossutil} --access-key-id #{ossid} --access-key-secret #{osssecret} -e #{endpoint} cp #{filenamedev} #{releasebucket}" //执行shell命令
end
end
- 方法调用方式:shell执行
fastlane 方法名
三、插件使用
- property file read
- 功能描述:用来读.properties(android上用来读取版本号和版本名称,ios已经有默认集成好了的,参考https://docs.fastlane.tools/actions/ 中project下的内容)
- github地址:https://github.com/unitedclassifiedsapps/fastlane-plugin-property_file_read
- 集成方法:shell命令执行
gem install fastlane-plugin-property_file_read
- 使用如下:
# 获取资源文件
properties = property_file_read(file: "gradle.properties"); //读取文件
# dev版本名称
version_name_dev = properties["MAJOR_VERSION_NUMBER"]+"."+ properties["MINOR_VERSION_NUMBER"]+"."+ properties["REVISION_NUMBER"]+"."+properties["BETA_SUFFIX_VERSION"];
.properties中文件内容如下:
ANDROID_APPLICATION_VERSION_CODE=74
MAJOR_VERSION_NUMBER=5
MINOR_VERSION_NUMBER=3
REVISION_NUMBER=0
- changelog plugin
- 功能描述:能按照节点读取符合https://keepachangelog.com/en/1.0.0/ 格式要求的md文件
- github地址:https://github.com/pajapro/fastlane-plugin-changelog
- 集成方法:shell命令执行
gem install fastlane-plugin-changelog
- 使用如下:
devlog = read_changelog(
changelog_path: './changelog.md', # Specify path to CHANGELOG.md
section_identifier: '['+version_name_release+']', # Specify what section to read
excluded_markdown_elements: ['-', '###'] # Specify which markdown elements should be excluded
)
- 可以使用
emojified_changelog
方法将文档格式变的更直观
四、特殊功能
- 使用fastlane向钉钉机器人发消息
- 参考文档:
- https://www.codeleading.com/article/7909571345/ 基础代码参考
- https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq 钉钉机器人的开发说明和发送格式文档
- 基础逻辑说明(以android为例):获取版本号->根据版本号使用read_changelog读取对应版本号节点下的md文件->使用emojified_changelog规范化文档内容->调用钉钉机器人发送消息
- 特殊说明:虽然钉钉机器人支持发送简单的md类型文档,但是由于直接调用该类型方法进行发送会丢失所有的换行,格式会很奇怪,故放弃该类型转为格式化text内容后以text类型发送
- 代码参考
desc "钉钉机器人发送生产环境测试包打包完成消息"
lane :betaTaskFinishedPush do
devlog = read_changelog(
changelog_path: './changelog.md', # Specify path to CHANGELOG.md
section_identifier: '['+version_name_release+']', # Specify what section to read
excluded_markdown_elements: ['-', '###'] # Specify which markdown elements should be excluded
)
emojified_changelog = emojify_changelog
puts(emojified_changelog)
text =
{
msgtype: "text",
text: {
content: "【#{app_name}】生产环境打包完成\n#{emojified_changelog}\n\n下载地址:https://mb-shared.oss-cn-hangzhou.aliyuncs.com/apk/musicbible_#{version_name_dev}_dev_release.apk\n"
},
at: {
isAtAll: true
}
}
uri = URI.parse("https://oapi.dingtalk.com/robot/send?access_token=ca9c4e805301ec17ed4058d8ef553d70f35c9d2093d382cef1fb049da55a6188")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri)
request.add_field('Content-Type', 'application/json')
request.body = text.to_json
response = https.request(request)
puts "Response #{response.code} #{response.message}: #{response.body}"
end