在代码存储库中最小化 CI 检查时间的最佳实践是什么?

问题描述 投票:0回答:2

我可以采取哪些措施来减少代码存储库检查运行所需的时间?

palantir-foundry foundry-code-repositories
2个回答
3
投票

如果您想了解有关检查中哪一步花费时间最长的更多详细信息,您可以将以下内容添加到末尾的

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  %s\n", 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()

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


2
投票

这是一个非常高水平的问题,所以我只是删除一些要点作为答案,因为有很多事情可以有助于长时间的 CI 检查运行。一旦你让你的问题更加确定,我会编辑这个。

我突然想到以下是发生这种情况的一些常见原因:

  • 您正在导入各种库,其中一些库具有交叉依赖关系,从而使您的 conda 库分辨率膨胀并使其永远需要时间。这里一个好的解决方案是手动固定版本,绕过 conda 库解决方案,使其速度大大加快。
  • 您是否正在更改库来进行实验?这将使您的 conda 缓存失效,强制重建缓存,这会花费更长的时间。
  • 您是在本地还是在互联网访问受限的租户内? CI 的某些步骤从网络下载软件包,如果您的机构部署的 Foundry 互联网访问速度较慢,这可能需要一些时间。
  • 您的测试需要很长时间才能运行?重构您的测试或以某种方式优化它们。
  • 您在 monorepo 中吗?它们的大小通常会膨胀,并且 CI 需要更长的时间,因为它们里面有太多东西。
© www.soinside.com 2019 - 2024. All rights reserved.