代码之家  ›  专栏  ›  技术社区  ›  dnh

AWS CodePipeline构建缺少Git历史记录

  •  10
  • dnh  · 技术社区  · 8 年前

    上下文:

    我建立了一个代码管道,使用CodeCommit和CodeBuild作为其源代码和构建阶段。

    我的构建包括一个插件( com.zoltu.git-versioning

    问题:

    这在AWS管道上失败,因为它在用于执行构建的源代码中找不到任何Git信息。

    显然,用于签出源代码的操作使用的导出忽略了Git元数据和历史记录。

    问题:

    如何配置CodeCommit或CodePipeline以执行正确的 git clone ? 我已经查看了这两个组件的设置(以及代码构建),但找不到任何配置来设置签出操作使用的命令。

    有人使用包含完整Git元数据的签出进行代码管道构建吗?

    4 回复  |  直到 8 年前
        1
  •  6
  •   Aaron    8 年前

    这在CodePipeline中的CodeCommit操作中目前不可能实现。

    https://forums.aws.amazon.com/thread.jspa?threadID=248267

        2
  •  5
  •   Neximos    5 年前

    CodePipeline自10月份起支持git完整克隆: https://aws.amazon.com/about-aws/whats-new/2020/09/aws-codepipeline-now-supports-git-clone-for-source-actions/

    在控制台中,转到源阶段并进行编辑。 你将有一个新的选项来完全克隆你的git历史。 full clone option

    在Terraform中,您必须将其添加到源操作的配置中:

          configuration = {
               RepositoryName       = var.repository_name
               BranchName           = "master"
               OutputArtifactFormat = "CODEBUILD_CLONE_REF"
             }

    更多信息:

    https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-codecommit-gitclone.html

        3
  •  4
  •   Ciprian Radu    5 年前

    enter image description here 你只需要做一些额外的步骤: https://docs.aws.amazon.com/codepipeline/latest/userguide/troubleshooting.html#codebuild-role-connections

    然而,CodePipeline目前不支持动态分支、Pull请求。看见 Dynamically change branches on AWS CodePipeline

    因此,如果您需要扩展Pull请求的管道,我建议您使用 Timothy Jones 在上面

    还有一件相关的事情值得一提。CodeBuild也有完整克隆选项。 enter image description here

    只要不使用本地源缓存选项,Git历史就存在。 enter image description here

    当我尝试使用上述缓存选项时,我注意到 .git 不是目录。它是一个包含一行文本的文件,例如:

    gitdir: /codebuild/local-cache/workspace/9475b907226283405f08daf5401aba99ec6111f966ae2b921e23aa256f52f0aa/.git
    

    我不知道为什么它现在是这样实现的,但是,这让人困惑(至少对我来说),我认为这不是预期的行为。

        4
  •  2
  •   Community Mohan Dere    6 年前

    虽然CodePipeline本身不支持这一点,但您 可以

    为此,您需要正确设置权限,然后仔细克隆存储库。

    权限

    1. 给你的代码构建角色 codecommit:GitPull 权限,使用CodeCommit存储库的资源ARN
    2. git-credential-helper: yes env buildspec文件的一部分

    克隆回购

    要克隆回购,您需要:

    1. 知道克隆URL和分支(CodeBuild不知道此信息)

    2. git reset 回到代码构建的提交 生成(否则在提交和生成之间会有竞争条件)。

      git reset "$CODEBUILD_RESOLVED_SOURCE_VERSION"
      

    如果你想举个例子,我做了一个 detailed writeup of the process ,并发布 an example CodePipeline stack showing it in action .

    推荐文章