从 DevOps 制品中学习、理解并支持 Docker
摘要
随着 DevOps 工具与框架的日益广泛使用,对能够支持代码之外内容的工具与技术之需求也在增长。当前针对 Docker 等工具的静态开发者辅助技术前沿仅限于浅层语法验证。我们识别出在从 DevOps 制品中学习、理解并支持开发者编写 DevOps 制品这一领域中的三个核心挑战:(i)DevOps 制品中的嵌套语言,(ii)规则挖掘,以及(iii)缺乏基于语义规则的分析。为应对这些挑战,我们引入了一个名为 binnacle 的工具集,它使我们能够摄取 90 万个 GitHub 仓库。聚焦于 Docker,我们提取了约 178,000 个唯一的 Dockerfile,并识别出一组由 Docker 专家编写的黄金集(Gold Set)Dockerfile。我们通过一种称为分阶段解析(phased parsing)的技术,将抽象语法树中有效不可解释节点的数量减少逾 80%,从而应对挑战(i)。为应对挑战(ii),我们引入了一种新颖的规则挖掘技术,能够恢复我们所策划基准中三分之二的规则。通过这种自动化挖掘,我们恢复了在手动规则收集过程中未发现的 16 条新规则。为应对挑战(iii),我们从黄金集中文件的提交记录手动收集了一组 Dockerfile 规则。这些规则封装了最佳实践,避免 docker build 失败,并改善了镜像大小与构建延迟。我们创建了一个使用这些规则的分析器,发现 GitHub 上的 Dockerfile 违规频率平均是我们黄金集中 Dockerfile 的 5 倍。我们还发现工业界 Dockerfile 的表现并不优于来自 GitHub 的那些。binnacle 中的学习规则与分析器可用于在 IDE 中辅助开发者创建 Dockerfile,并以事后方式识别现有 Dockerfile 中的问题并加以改进。
引用
@article{arxiv.2002.03064,
title = {Learning from, Understanding, and Supporting DevOps Artifacts for Docker},
author = {Jordan Henkel and Christian Bird and Shuvendu K. Lahiri and Thomas Reps},
journal= {arXiv preprint arXiv:2002.03064},
year = {2020}
}
备注
Published in ICSE'2020