将文件从 Jenkins 工作区提交到 SVN



我在 Subversion 仓库中保存了一个项目,并用 Jenkins 编译它。当我运行构建时,Jenkins 将项目拉入工作区目录。我需要将一个更改的文件从 Jenkins 工作区提交到 Subversion 中。我该怎么做??

感谢您的回答...

你能再说一些细节吗?这个文件到底是什么,为什么需要把它作为 Jenkins 构建的一部分提交?你在构建什么(Java?C++?.NET?你是如何构建它的?

通常,除了文件之外,您不应将任何内容置于版本控制之下。也就是说,如果你可以构建它,你不应该把它放在版本控制中。很多人喜欢将他们构建的代码提交到他们的版本控制系统中,但这通常是一个很大的错误。二进制文件要大得多,很少有差异。这导致源存储库中有 90% 已编译的代码 - 几乎所有代码都已过时。这对于 Subversion 来说尤其成问题,因为 Subversion 没有办法(轻松)删除过时的代码。

Jenkins 有一个功能,允许您存档构建的文件以便于访问。我们一直在使用它。我们构建我们的代码,该程序可以在 Jenkins 中下载。更好的是,Jenkins 将删除较旧的构建(您可以保存最后的 X 个构建或仅保存小于 X 天的版本)。如果你有一个候选版本,则可以锁定该版本以防止它被删除。


不过,如果你坚持这样做,你可以做几件事,你必须注意的事情:

  1. 当您设置 Jenkins 以自动构建每个更改,并在版本控制系统中提交更改时,Jenkins 将看到该更改,并开始新的构建。然后,Jenkins 保存更改,查看更改,并执行另一个构建。确保在 Jenkins 应该进行构建时将文件或目录排除在考虑之外。您可以在指定结帐的 URL 时指定此项。

  2. 与大多数版本控制系统不同,Subversion 是独立于客户端的。客户端有一个实际的 API。Jenkins 不需要标准的 Subversion 命令行客户端,因此请确保已安装它。确保安装与 SVNKit 客户端中内置的 Jenkins 兼容的客户端。由于 Subversion 1.6、1.7 和 1.8 都采用不同的客户端格式,因此尤其如此。

  3. 您可以在 Jenkins 中向构建添加多个构建步骤。只需添加新的 shell 脚本或批处理脚本步骤,然后添加svn commit -m "comment of some sort"步骤。一旦你处理了前两点,就很容易做到。但是,请仔细考虑为什么要这样做。

正如我之前所说,99.9999% 的情况下,你不应该使用 Jenkins 来提交它构建的更改。我确定 0.0001% 的原因存在于某个地方,但我从未见过它。如果要使构建的文件可供其他项目普遍访问,请使用 Jenkin 的功能来存档构建的文件。

如果 Jenkins 正在构建的产品需要用于另一个构建,则可以使用复制工件插件将构建工件复制到另一个作业,然后触发该作业。更好的是,使用发布存储库系统。在Java中,你可以使用Maven发布存储库,如Nexus或Artifactory。要使用工件并将其部署到该存储库,您可以使用 Ivy 或 Maven 或 Gradle。如果要生成 .NET,请查看 Nuget。

请看这个答案: Jenkins svn commit post-build

应该可以使用新的构建步骤(或后期构建步骤)进行提交。

但要小心 Jenkins 工作区的 SVN 布局。Subversion 插件使用 SVNKit 来处理 SVN 命令。您的工作区可能使用 SVN 布局 1.6。

如果计算机上的 SVN 客户端较新,则 SVN 提交将失败并显示以下错误:org.apache.subversion.javahl.ClientException:工作副本需要升级svn:工作副本 'C:....太旧(格式 10,由 Subversion 1.6 创建)

你可以仔细使用:

svn commit -username someuser -password %injected_password% 

要在 Build Environment 中注入密码,此命令将密码作为环境变量注入构建

注意:该密码可能在作业触发器批处理中可见。

最新更新