上下文
我有一个CodePipeline设置,它使用CodeCommit和CodeBuild作为源和构建阶段。
我的构建包含一个插件(com.zoltu.git-versioning
),它使用Git提交历史记录动态创建构建版本号。
问题:
这在AWS管道上失败,因为它无法在用于执行构建的源中找到任何Git信息。
显然,用于签出源的操作使用省略Git元数据和历史记录的导出。
问题:
如何配置CodeCommit或CodePipeline以执行正确的git clone
?我查看了这些组件(以及CodeBuild)的设置,但找不到任何配置来设置结帐操作使用的命令。
是否有人使用包含完整Git元数据的结帐处理CodePipeline构建?
答案 0 :(得分:4)
CodePipeline中的CodeCommit操作目前无法实现此目的。
答案 1 :(得分:1)
尽管CodePipeline本身不支持此功能,但是您可以通过在CodeBuild中克隆存储库来 获取信息。
为此,您需要正确设置权限,然后仔细克隆存储库。
要授予克隆存储库的权限,您需要:
codecommit:GitPull
权限以及您的CodeCommit存储库的资源ARN git-credential-helper: yes
放入buildspec文件的env
部分中要克隆存储库,您需要:
git reset
返回到CodeBuild是
构建(否则您将在提交和构建之间具有竞争条件)。
git reset "$CODEBUILD_RESOLVED_SOURCE_VERSION"
如果您想举一些例子,我做了detailed writeup of the process,并发表了an example CodePipeline stack showing it in action。
答案 2 :(得分:1)
CodePipeline截至十月支持git full clone: 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