一句话:提出语义 linter CD-Linter 检测 CD 流水线配置中的四类气味,并通过六个月 GitLab 研究验证其有效性与普遍性。
持续集成/持续交付(CI/CD)流水线的配置复杂且易错,已有 linter 多关注语法错误、安全漏洞或构建服务器功能误用,未覆盖可能违背 CD 原则的常见误配置。论文提出 CD-Linter,一个语义 linter,可自动识别流水线配置文件中的四类 CD 气味。作者在 GitLab 上开展大规模长期研究:跟踪 145 个开源项目中的 145 个 issue 达六个月,人工验证代表性样本上的检测精确率与召回率,并评估 5,312 个开源项目中气味的规模。结果显示多数开发者接受并修复这些气味,linter 精确率 87%、召回率 94%;在配置较长的项目中,31% 至少受一种气味影响。
An effective and efficient application of Continuous Integration (CI) and Delivery (CD) requires software projects to follow certain principles and good practices. Configuring such a CI/CD pipeline is challenging and error-prone. Therefore, automated linters have been proposed to detect errors in the pipeline. While existing linters identify syntactic errors, detect security vulnerabilities or misuse of the features provided by build servers, they do not support developers that want to prevent common misconfigurations of a CD pipeline that potentially violate CD principles (“CD smells”). To this end, we propose CD-Linter, a semantic linter that can automatically identify four different smells in pipeline configuration files. We have evaluated our approach through a large-scale and long-term study that consists of (i) monitoring 145 issues (opened in as many open-source projects) over a period of 6 months, (ii) manually validating the detection precision and recall on a representative sample of issues, and (iii) assessing the magnitude of the observed smells on 5,312 open-source projects on GitLab. Our results show that CD smells are accepted and fixed by most of the developers and our linter achieves a precision of 87% and a recall of 94%. Those smells can be frequently observed in the wild, as 31% of projects with long configurations are affected by at least one smell.
@inproceedings{paperbot5833,
title = {Configuration smells in continuous delivery pipelines: a linter and a six-month study on GitLab},
author = {Carmine Vassallo and Sebastian Proksch and Anna Jancso and Harald C. Gall and Massimiliano Di Penta},
booktitle = {FSE},
year = {2020},
doi = {10.1145/3368089.3409709}
}