首页 > 解决方案 > AWS 代码构建 - 缓存的 DOWNLOAD_SOURCE 耗时太长

问题描述

我正在尝试提高我在 CodeBuild 上的一个项目的构建速度。该项目使用 Github 源提供程序并启用了本地类型的源缓存。

我第一次运行构建需要 103 秒。由于源缓存,我在第一个完成后立即再次运行它,预计它会在几秒钟内运行,但花了 60 秒。

我在这里缺少什么?缓存不工作吗?如果它有效,为什么第二次运行需要那么长时间?

谢谢

项目详情:

{
    "projectsNotFound": [],
    "projects": [
        {
            "environment": {
                "computeType": "BUILD_GENERAL1_LARGE",
                "imagePullCredentialsType": "SERVICE_ROLE",
                "privilegedMode": true,
                "image": "111669150171.dkr.ecr.us-east-1.amazonaws.com/***********/ep-build-env:latest",
                "environmentVariables": [
                    {
                        "type": "PLAINTEXT",
                        "name": "NEXUS_URI",
                        "value": "http://***************"
                    },
                    {
                        "type": "PLAINTEXT",
                        "name": "REGISTRY",
                        "value": "111669150171.dkr.ecr.us-east-1.amazonaws.com/*********"
                    }
                ],
                "type": "LINUX_CONTAINER"
            },
            "timeoutInMinutes": 60,
            "name": "StorefrontApi",
            "serviceRole": "arn:aws:iam::111669150171:role/CodeBuild-ECRReadOnly",
            "tags": [],
            "artifacts": {
                "type": "NO_ARTIFACTS"
            },
            "lastModified": 1571227097.581,
            "cache": {
                "type": "LOCAL",
                "modes": [
                    "LOCAL_DOCKER_LAYER_CACHE",
                    "LOCAL_SOURCE_CACHE",
                    "LOCAL_CUSTOM_CACHE"
                ]
            },
            "vpcConfig": {
                "subnets": [
                    "subnet-fd7f958b"
                ],
                "vpcId": "vpc-71e3f414",
                "securityGroupIds": [
                    "sg-19b65e6c",
                    "sg-9e28e9f9"
                ]
            },
            "created": 1571082681.262,
            "sourceVersion": "refs/heads/ep-mysql",
            "source": {
                "buildspec": "version: 0.2\n\nphases:\n  build:\n    commands:\n      - env\n      - cd extensions\n      - mvn --settings $CODEBUILD_SRC_DIR_DEVOPS_WINE/pipelines/storefront/build-war/settings.xml --projects storefront/ext-storefront-webapp -am -DskipAllTests clean install\n\nartifacts:\n  secondary-artifacts:\n    storefront-war:\n      base-directory: $CODEBUILD_SRC_DIR/extensions/storefront/ext-storefront-webapp/target\n      files:\n        - \"*.war\"\n\ncache:\n  paths:\n    - '/root/.m2/**/*'\n    - '/root/.npm/**/*'",
                "insecureSsl": false,
                "gitSubmodulesConfig": {
                    "fetchSubmodules": false
                },
                "location": "https://github.com/*****************.git",
                "gitCloneDepth": 1,
                "type": "GITHUB",
                "reportBuildStatus": false
            },
            "badge": {
                "badgeEnabled": false
            },
            "queuedTimeoutInMinutes": 480,
            "secondaryArtifacts": [],
            "logsConfig": {
                "s3Logs": {
                    "status": "DISABLED",
                    "encryptionDisabled": false
                },
                "cloudWatchLogs": {
                    "status": "ENABLED"
                }
            },
            "secondarySources": [
                {
                    "insecureSsl": false,
                    "gitSubmodulesConfig": {
                        "fetchSubmodules": false
                    },
                    "location": "https://github.com/*****************.git",
                    "sourceIdentifier": "DEVOPS_WINE",
                    "gitCloneDepth": 1,
                    "type": "GITHUB",
                    "reportBuildStatus": false
                }
            ],
            "encryptionKey": "arn:aws:kms:us-east-1:111669150171:alias/aws/s3",
            "arn": "arn:aws:codebuild:us-east-1:111669150171:project/StorefrontApi",
            "secondarySourceVersions": [
                {
                    "sourceVersion": "refs/heads/staging",
                    "sourceIdentifier": "DEVOPS_WINE"
                }
            ]
        }
    ]
}

标签: aws-codebuild

解决方案


显然,在撰写本文时,CodeBuild 并未使用本机git客户端从 GitHub 获取源代码。我了解 CodeBuild 内部团队有一个内部功能请求,要求从他们使用的任何东西转移到本机git客户端以提高性能。

您的存储库是否通过更改在其历史记录中有大量大文件?您可以将此答案用于运行命令以分析您的存储库。

如果您的历史记录中有很多大文件并且可以删除它们,那么您可以使用BFG Repo Cleaner之类的工具来重写历史记录。那应该加快这个DOWNLOAD_SOURCE阶段。

此外,如果您有 AWS 的专门支持计划,您应该联系您的 TAM 以支持功能请求,以便迁移到本地git以进行 GitHub 源下载。


推荐阅读