GPG 验证部署脚本中的 git 标签

GPG 验证部署脚本中的 git 标签

我们希望我们的部署过程直接从我们的 git 存储库中提取,但只有git tag -s使用 GPG 签名(通过)签名的新更改才会激活。我发现很少有使用 GPG 验证 git 标签的工作流程示例,所以我不确定这种事情是否有“最佳实践”。

到目前为止我们得到的是这样的:

# discard erroneous local changes
git reset --hard HEAD

# get changes
git fetch
start=$(git rev-parse FETCH_HEAD)

# get new tags
git fetch --tags

# find most recent release tag
tag=$(git describe --abbrev=0 --match "release-*" $start)

if git tag -v $tag; then
  git checkout $tag
  ...do stuff...
fi

这有意义吗?特别是,为了避免错误的本地更改阻碍部署过程,这样git reset --hard HEAD做正确吗?另外,FETCH_HEAD似乎有必要记住,HEAD在 的输出中不会显示之后的其他标记git describe。还有其他方法可以做到这一点吗?

或者,如果您有使用签名标签进行验证的记录部署工作流程,我会对该链接感兴趣。

答案1

问题的标题是关于部署工作流中的签名标签,但您问的问题与签名标签几乎没有关系。实际上,唯一不同的步骤是验证标签,而您已经在这样做了。

git reset --hard HEAD不会清除任何未跟踪的本地文件,这很可能会破坏您的构建过程。之后git reset --hard您可能还想运行git clean -d -x -f

git fetch可能会获取多个分支,也可能不会获取您期望获取的内容。所有获取的分支都将被添加到,.git/FETCH_HEAD因此为了避免在使用FETCH_HEADref 时出现任何意外,我建议明确获取您的发布分支。类似于git fetch $remote $branch

您问的是是否有“更好”的方法来做到这一点,但我个人认为这已经足够好了。如果您的目标是避免不必要的获取,那么您可以尝试一下输出,git ls-remote但这确实不值得付出努力。

就我个人而言,对于可重现的构建,我每次都会简单地在干净的目录中启动构建。等等。这样,您还可以轻松地将此脚本移动到另一台机器。为了加快初始提取速度,您可以使用(了解更多信息)dir=$(mktemp -d); cd $dir; git init; git remote add ...告诉临时目录从永久本地目录中查找 git 对象。echo $permanent_git_directory/.git/objects > .git/objects/info/alternatesman gitrepository-layout

相关内容