我们希望我们的部署过程直接从我们的 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_HEAD
ref 时出现任何意外,我建议明确获取您的发布分支。类似于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/alternates
man gitrepository-layout