【问题标题】:AWS CodeBuild default environment variables.AWS CodeBuild 默认环境变量。
【发布时间】:2020-08-25 06:56:53
【问题描述】:

我创建了一个管道,它从 CodeCommit 存储库中获取代码,通过 CodeBuild 构建它并将代码推送到 S3 存储桶。

对于我的 Codebuild,我使用的是 AWS 托管映像。 aws/codebuild/nodejs:7.0.0

如果我通过 CodeBuild 控制台手动启动构建并指定存储库,我会在构建规范中运行以下命令时获取存储库 URL

- printf ${CODEBUILD_SOURCE_REPO_URL}

但是如果 CodeBuild 是通过推送到存储库自动触发的。 CODEBUILD_SOURCE_REPO_URL 不返回任何内容

【问题讨论】:

  • 那么这里的问题是什么?是不是建不成功?
  • 构建运行良好。但问题是我想使用 CODEBUILD_SOURCE_REPO_URL 变量以编程方式设置 S3 存储桶以将文件复制到。我的仓库名称和存储桶名称相同。因此,我最好的选择是为多个管道和源代码库提供一个 CodeBuild 我有 4 个不同的应用程序,都有一个暂存版本和一个需要上传到 S3 的生产版本。我可以使用设置了环境变量的不同代码构建项目,并使用我的自定义环境变量进行复制。但我宁愿维护 1 个代码构建项目而不是 4 个
  • 我相信您现在正在使用 aws cli 将工件复制到 s3,并且您正在 buildspec.yml 文件中进行操作。正确的做法是使用 CodeBuild 的 Artifacts 选项将工件上传到 S3。
  • 是的,这就是我正在做的。我如何将工件上传到 S3?我在 CodeBuild 阶段没有看到任何允许将工件从 Codebuild 上传到 S3 的选项。
  • 它是 buildspec.yml 文件的一部分。您还需要设置存储桶和密钥以指定在设置构建项目时上传这些文件的位置。看docs.aws.amazon.com/codebuild/latest/userguide/…的例子。

标签: amazon-web-services amazon-s3 aws-codepipeline aws-codebuild aws-codecommit


【解决方案1】:

如果您从 codepipeline 运行该进程,它将为空。

看看这个:https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html

CODEBUILD_SOURCE_REPO_URL:输入工件或源代码存储库的 URL。对于 Amazon S3,这是 s3://,后跟存储桶名称和输入工件的路径。对于 AWS CodeCommit 和 GitHub,这是存储库的克隆 URL。 如果构建源自 AWS CodePipeline,那么这可能是空的。

【讨论】:

    【解决方案2】:

    如果您通过 CodeCommit 进行连接,则可以使用以下方法拆分字符串以获得更有用的值,例如 Account Id 和 Repo Name:

    echo "Region = ${AWS_REGION}"
    echo "Account Id = $(echo $CODEBUILD_BUILD_ARN | cut -f5 -d ':')"
    echo "Repo Name = $(echo $CODEBUILD_SOURCE_VERSION | cut -f2 -d '/')"
    echo "Commit Id = ${CODEBUILD_RESOLVED_SOURCE_VERSION}"
    

    哪些输出:

    Region = us-west-2
    Account Id = 0123456789
    Repo Name = my-app
    Commit Id = a46218c9160f932f2a91748a449b3f9818964642
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2016-02-29
      • 2020-05-09
      • 2017-06-17
      • 2020-09-29
      • 2021-05-01
      • 1970-01-01
      相关资源
      最近更新 更多