关于认证:Jenkins svn export build step

Jenkins svn export build step

在我的 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 吗?我真的不想在构建脚本本身中包含凭据。

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


    最后,我最终做了类似 Jenkins: Access global passwords in powershell

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

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