你如何在Jenkins构建推广步骤中推送git标签?

时间:2014-04-07 18:30:28

标签: git jenkins jenkins-plugins

我有一个以this讨论(使用提升的构建插件)为模型的构建升级过程。一般来说,它运行良好。然而,对于促销过程的一些“风味”(并非所有),我想推出一个git标签。我通过“执行shell”步骤实现了这一步骤作为促销操作之一。这一直运作良好,然后今天失败了,下面的错误。我怀疑我登陆了一个构建奴隶,其中工作区尚未为git初始化 - 而且我过去一直很幸运(使用Cloudbees - 构建从属是动态分配的。)

我尝试过“git发布者”,但似乎期待你处于git源插件已经完成其工作的环境中。有没有人能够从构建促销步骤中可靠地推送标签?

+ git checkout develop
fatal: Not a git repository (or any of the parent directories): .git

2 个答案:

答案 0 :(得分:1)

到目前为止,这对我有用:

git tag MYTAG ${PROMOTED_GIT_COMMIT}
git push --tags

我不确定我是否简化了问题,在我的环境中,促销似乎是在归档工件所在的主人身上执行的。

答案 1 :(得分:0)

免责声明:我对Git一无所知。

执行促销时,您永远不应该依赖${WORKSPACE}下的文件。最好的情况是,它们可能比您正在执行的作业运行促销更新,并且在最坏的情况下,工作区在执行新结帐时可能是空的(或者在您的情况下不存在)。这就是为什么在discussion that you linked,我正在使用复制工件步骤。请注意,该步骤从归档工件复制,而不是从作业工作区复制,应始终将其视为临时和暂时的。

如果您需要依赖SCM结帐进行促销流程,则必须:

  • 执行命令行检出(Jenkins不会跟踪它)或
  • 使用SCM结帐运行另一份工作(Jenkins跟踪的所有好处)。

在这两种情况下,我都假设您要将SCM修订号传递给升级过程(用于命令行检出,或作为调用其他作业的参数)。 “触发/调用构建”步骤有一个传递父SVN修订版的选项,但我不知道它是否具有相同的Git选项。在最坏的情况下,在“构建”作业执行时,将Git修订存储到文件中,并将该文件与其余工件一起存档。在促销过程中,使用“复制工件”步骤检索已保存的文件,然后从该文件中提取Git修订版。您可以使用 EnvInject 插件来帮助完成所有这些操作,并将提取的Git修订版作为促销流程的环境变量提供。

我的推荐是您的促销流程中的第二个“触发/调用构建”步骤,该步骤会触发专门针对您想要的工作,并将其传递给Git修订版参数。