在代码库中最大限度地减少CI检查时间的最佳做法是什么



我能做些什么来减少代码回购检查运行所需的时间吗?

如果您想了解检查中哪一步耗时最长的详细信息,可以在末尾将以下内容添加到transforms-python/build.gradle文件中:

import java.util.concurrent.TimeUnit
// Log timings per task.
class TimingsListener implements TaskExecutionListener, BuildListener {
private long startTime
private timings = []
@Override
void beforeExecute(Task task) {
startTime = System.nanoTime()
}
@Override
void afterExecute(Task task, TaskState taskState) {
def ms = TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS);
timings.add([ms, task.path])
task.project.logger.warn "${task.path} took ${ms}ms"
}
@Override
void buildFinished(BuildResult result) {
println "Task timings:"
for (timing in timings) {
if (timing[0] >= 50) {
printf "%7sms  %sn", timing
}
}
}
@Override
void buildStarted(Gradle gradle) {}
@Override
void projectsEvaluated(Gradle gradle) {}
@Override
void projectsLoaded(Gradle gradle) {}
@Override
void settingsEvaluated(Settings settings) {}
}
gradle.addListener new TimingsListener()

这通常可以揭示哪一步最慢,当与另一个答案结合使用时,可以有针对性地减少检查时间。

这是一个非常高级别的问题,所以我只是放弃一些要点作为答案,因为有太多的事情会导致长时间的CI检查运行。一旦你的问题更加确定,我会编辑这个。

我脑海中浮现的是发生这种情况的一些常见原因:

  • 您正在导入广泛的库,其中一些库具有交叉依赖性,这会提高您的conda库的分辨率,并使其花费很长时间。这里的一个好的解决方案是手动固定版本,绕过conda库的解决方案,使其实质上更快
  • 你是在改变图书馆以进行实验吗?这将使您的conda缓存失效,强制进行需要更长时间的缓存重建
  • 你是在prem还是在Tennant限制上网的地方?CI的一些步骤是从网上下载包,如果您的机构部署了互联网接入缓慢的铸造厂,这可能需要时间
  • 你的测试运行需要很长时间?重构测试或以某种方式优化测试
  • 你在单回购吗?这些通常在大小上膨胀,CI需要更长的时间,因为其中有太多的东西

最新更新