Jenkins svn 导出构建步骤

Posted

技术标签:

【中文标题】Jenkins svn 导出构建步骤【英文标题】:Jenkins svn export build step 【发布时间】:2015-04-27 22:02:04 【问题描述】:

在我的 Jenkins 服务器上,我有一个项目从 SVN 中检查一些源代码并运行一个名为 MakeInstaller.ps1 的构建脚本,该脚本与源代码一起被检出。这很简单,这部分效果很好。

没有很好的工作是 MakeInstaller.ps1 的一部分尝试对某些其他源代码的特定版本进行 svn 导出,但它没有连接到 SVN 的凭据。当我在我的 PC 上运行构建脚本时,这完全没问题,因为 Tortoise SVN 缓存了凭据。

Jenkins 已经拥有我的 SVN 凭据,但这仅在 Jenkins 签出源代码时使用,而不是在我的构建脚本尝试签出源代码时使用。

我试过了:

    在运行 Jenkins 的机器上安装 Tortoise SVN 命令行工具。这修复了我最初的“svn.exe not found”错误,但它无法知道我在此服务器上的凭据 我什至在该机器上使用 Tortoise SVN 登录到 SVN 服务器,尝试让它缓存凭据,但它仍然无法正常工作。我猜这是因为 Jenkins 服务不在我登录时使用的同一用户下运行。

我觉得我走错了路。将 Tortoise SVN 与 Jenkins SVN 插件已经在使用的任何 SVN 客户端一起安装在该机器上似乎有点奇怪。

我的问题:有没有办法从 Jenkins 的构建脚本中导出 SVN,并让它使用 Jenkins 已经知道的凭据?我可以使用与 Jenkins SVN 插件相同的 svn.exe 吗?我真的不想在构建脚本本身中包含凭据。

我发现的大多数类似问题都涉及由于凭据错误导致的初始签出失败,而不是作为构建脚本的一部分发生的签出。

【问题讨论】:

【参考方案1】:

最后,我做了类似Jenkins: Access global passwords in powershell的事情

我不得不使用 EnvInject,因为当我尝试保存项目时,凭据绑定插件给了我一个错误。这涉及将我的 SVN 密码的另一个实例添加到 Jenkins,并将 Jenkins 用户名硬编码到我的构建脚本中,但它正在工作。

现在构建脚本尝试使用虚拟 svn info 命令进行身份验证。如果我在我的本地机器上运行脚本,它可以工作并且它在没有用户名或密码的情况下继续。如果虚拟 svn info 命令失败,它会尝试使用 --username Jenkins 和 --password $env:svnpassword 登录,其中 svnpassword 环境变量由 EnvInject 提供。

【讨论】:

以上是关于Jenkins svn 导出构建步骤的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins构建Docker容器

SVN怎么触发Jenkins自动构建

SVN怎么触发Jenkins自动构建

jenkins根据SVN增量更新

使用 SVN 在 Jenkins 中构建多个分支

手把手教你用 Jenkins 构建 iOS 项目