我正在编写一个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很弱(例如,您不能在日志文件中添加一行(。