目前有没有办法在快速通道操作中提取快速通道操作的输出?
Is there currently a way to extract the output of a fastlane action within the fastlane actions?
我正在使用第三方 fastlane 插件,它包含一个将显示我需要捕获的重要信息的操作,例如 link。
我试图找到一种优雅的方式来在快速通道操作中捕获这些日志,我试图避免使用 shell 命令,但如果这是唯一的方法,那么我想我别无选择。
我需要这个 link,因为它是独一无二的 运行dom link,其中包含我要下载的资源。
我尝试重定向 stdout 无济于事,因为 fastlane 使用他们自己的记录器(通常 UI.message)并且正要向 fastlane 提交功能请求但我想也许其他人已经 运行并设法通过它。
有没有办法重定向并捕获这种类型的日志?
这是UI周围的fastlane源代码:https://github.com/fastlane/fastlane/tree/master/fastlane_core/lib/fastlane_core/ui
这是我尝试重定向输出的方法之一:
Capturing logger output inside a method
如有任何帮助/建议/资源,我们将不胜感激!
fastlane 的构建方式允许您将 UI 层替换为您自己的层。您可以在 fastlane.ci GitHub 存储库 https://github.com/fastlane/ci/blob/master/app/features/build_runner/fastlane_build_runner_helpers/fastlane_ci_output.rb
上找到示例实现
您接下来的设置方式如下
ci_output = FastlaneCI::FastlaneCIOutput.new(
each_line_block: proc do |raw_row|
puts "new line here, access raw_row"
end
)
FastlaneCore::UI.ui_object = ci_output
我不知道这是否对你有帮助,但我设法将 fastlane stdout 捕获到一个变量以获得我想要的东西(在我的例子中是获得 iPhone 开发证书的通用名称)使用这个简单的方法
def with_captured_stdout
original_stdout = $stdout
$stdout = StringIO.new
yield
$stdout.string
ensure
$stdout = original_stdout
end
lane :test do |options|
match_dev = with_captured_stdout { match(type: 'development') }
puts match_dev
@dev_index = match_dev.index('iPhone Developer')
ENV['DEV_CODE_SIGN_ID'] = match_dev[@dev_index..match_dev.index(')', @dev_index)]
# ENV['DEV_CODE_SIGN_ID'] = "iPhone Developer: Test Name (XXXXXXXX)"
end
来自
忘记更新了,不过最后我是这样解决的:
module Fastlane
module Helper
class UtilHelper
# Redirects standard output and standard error to a file
# (currently only way we know how to capture fastlane ui messages)
def self.redirect_stdout_to_file(filename)
original_stdout = $stdout.clone
original_stderr = $stderr.clone
$stderr.reopen File.new(filename, 'w')
$stdout.reopen File.new(filename, 'w')
yield
ensure
$stdout.reopen original_stdout
$stderr.reopen original_stderr
end
end
end
end
我是这样使用它的:
temp_file = 'testlab.log'
UtilHelper.redirect_stdout_to_file(temp_file) { upload_xctestrun() }
upload_xctrestrun
做什么是无关紧要的,只要知道它是 fastlane 插件的一个函数,它使用 fastlane UI
对象输出消息,如下所示:
UI.message("Some fastlane decorated message here")
希望这对任何人都有帮助:)
我不确定这是否正是 OP 想要的答案,但似乎确实有一种方法可以将操作结果作为 json 字符串。我在这里添加这个是因为我在搜索我的问题时发现了这个问题,并且在 fastlane 文档中并不明显,这是可能的。
在我的 Fastlane 文件中,我使用了这些操作:
packageName = "com.example.mine"
versionName = google_play_track_release_names(
package_name: packageName,
track: "production"
)
versionCode = google_play_track_version_codes(
package_name: packageName,
track: "production"
)
UI.message "Package Info: #{packageName}, #{versionName} #{versionCode}"
输出看起来像这样
Package Info: com.example.mine, ["4.2.0"] [2027]
我还抑制了所有屏幕输出,方法是通过 grep 管道命令获取我想要的行。 (我也找不到执行此操作的参数或选项。)
fastlane android get_version | grep "Package Info
希望这对像我这样的新手有所帮助!
我正在使用第三方 fastlane 插件,它包含一个将显示我需要捕获的重要信息的操作,例如 link。
我试图找到一种优雅的方式来在快速通道操作中捕获这些日志,我试图避免使用 shell 命令,但如果这是唯一的方法,那么我想我别无选择。
我需要这个 link,因为它是独一无二的 运行dom link,其中包含我要下载的资源。
我尝试重定向 stdout 无济于事,因为 fastlane 使用他们自己的记录器(通常 UI.message)并且正要向 fastlane 提交功能请求但我想也许其他人已经 运行并设法通过它。
有没有办法重定向并捕获这种类型的日志?
这是UI周围的fastlane源代码:https://github.com/fastlane/fastlane/tree/master/fastlane_core/lib/fastlane_core/ui
这是我尝试重定向输出的方法之一: Capturing logger output inside a method
如有任何帮助/建议/资源,我们将不胜感激!
fastlane 的构建方式允许您将 UI 层替换为您自己的层。您可以在 fastlane.ci GitHub 存储库 https://github.com/fastlane/ci/blob/master/app/features/build_runner/fastlane_build_runner_helpers/fastlane_ci_output.rb
上找到示例实现您接下来的设置方式如下
ci_output = FastlaneCI::FastlaneCIOutput.new(
each_line_block: proc do |raw_row|
puts "new line here, access raw_row"
end
)
FastlaneCore::UI.ui_object = ci_output
我不知道这是否对你有帮助,但我设法将 fastlane stdout 捕获到一个变量以获得我想要的东西(在我的例子中是获得 iPhone 开发证书的通用名称)使用这个简单的方法
def with_captured_stdout
original_stdout = $stdout
$stdout = StringIO.new
yield
$stdout.string
ensure
$stdout = original_stdout
end
lane :test do |options|
match_dev = with_captured_stdout { match(type: 'development') }
puts match_dev
@dev_index = match_dev.index('iPhone Developer')
ENV['DEV_CODE_SIGN_ID'] = match_dev[@dev_index..match_dev.index(')', @dev_index)]
# ENV['DEV_CODE_SIGN_ID'] = "iPhone Developer: Test Name (XXXXXXXX)"
end
来自
忘记更新了,不过最后我是这样解决的:
module Fastlane
module Helper
class UtilHelper
# Redirects standard output and standard error to a file
# (currently only way we know how to capture fastlane ui messages)
def self.redirect_stdout_to_file(filename)
original_stdout = $stdout.clone
original_stderr = $stderr.clone
$stderr.reopen File.new(filename, 'w')
$stdout.reopen File.new(filename, 'w')
yield
ensure
$stdout.reopen original_stdout
$stderr.reopen original_stderr
end
end
end
end
我是这样使用它的:
temp_file = 'testlab.log'
UtilHelper.redirect_stdout_to_file(temp_file) { upload_xctestrun() }
upload_xctrestrun
做什么是无关紧要的,只要知道它是 fastlane 插件的一个函数,它使用 fastlane UI
对象输出消息,如下所示:
UI.message("Some fastlane decorated message here")
希望这对任何人都有帮助:)
我不确定这是否正是 OP 想要的答案,但似乎确实有一种方法可以将操作结果作为 json 字符串。我在这里添加这个是因为我在搜索我的问题时发现了这个问题,并且在 fastlane 文档中并不明显,这是可能的。
在我的 Fastlane 文件中,我使用了这些操作:
packageName = "com.example.mine"
versionName = google_play_track_release_names(
package_name: packageName,
track: "production"
)
versionCode = google_play_track_version_codes(
package_name: packageName,
track: "production"
)
UI.message "Package Info: #{packageName}, #{versionName} #{versionCode}"
输出看起来像这样
Package Info: com.example.mine, ["4.2.0"] [2027]
我还抑制了所有屏幕输出,方法是通过 grep 管道命令获取我想要的行。 (我也找不到执行此操作的参数或选项。)
fastlane android get_version | grep "Package Info
希望这对像我这样的新手有所帮助!