如何在Azure管道中收集VS代码日志



我正在编写一个VS代码扩展,集成测试只在Azure Pipelines运行时失败。我需要开始从VS代码中收集日志来分析它们。在本地,它们分别出现在%appdata%Codelogs(在Windows上(和~/.config/Code/logs(在linux上(下。但在Azure Pipelines下,它们似乎不是在这些位置创建的。

最终,我需要编写一个Azure Pipelines步骤来发布这些日志。类似这样的东西:

- publish: ${{ parameters.logsLocation }}
artifact: VS Code logs ($(Agent.JobName))
displayName: Publishing VS Code logs
condition: succeededOrFailed()

有人知道我应该从哪条路径发布吗?

我尝试过的logsLocation的值:

  • $(AppData(/漫游/代码/日志
  • /home/vsts/.config/Code/logs
  • ~/AppData/Roaming/Code/logs
  • ~/.config/Code/logs

我最终就是这样做的:

首先,定义一个可预测的地方,日志应该通过管道中的一个变量丢弃:

variables:
VSCODE_DATA_DIR: $(Agent.TempDirectory)/vscode_data

然后,管道应该从该位置发布日志:

- publish: $(VSCODE_DATA_DIR)/logs
artifact: VS Code logs ($(Agent.JobName))
displayName: Publishing VS Code logs
condition: succeededOrFailed()

我在工件名称中使用$(Agent.JobName),因为我在所有3个操作系统上运行VS代码扩展测试,所以我可能需要查看每个操作系统的日志。

最后,我更新了我的集成测试运行程序,以便向VS代码过程传递一个额外的参数:

const launchArgs: string[] = []
if (process.env.VSCODE_DATA_DIR) {
launchArgs.push('--user-data-dir', process.env.VSCODE_DATA_DIR)
}
await runTests({ vscodeExecutablePath, extensionDevelopmentPath, extensionTestsPath, launchArgs })

因此,现在VS Code生成的任何日志都将被捕获。这些日志已经包含了一些关于我的扩展的信息。我的扩展程序可以通过写入输出通道来做出更多贡献,该通道会自动捕获在日志文件中。我可以做的另一件事是将日志文件直接导入context.logUri目录(如这里所建议的(,但这需要做更多的工作,而且VS Code提供的通过URI编写文件的API很弱(例如,您不能在日志文件中添加一行(。

最新更新