Jenkins:通过特定的 TFS 变更集获取源代码

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

jenkins ci ”系列都是关于创建用于构建项目或运行测试的作业的有用技术和方法。有时需要所有的冒烟测试定期运行并且是绿色的。但是,总会有新的发展,并且可能会在测试中引入错误。大多数时候,只有当您 100% 确定新更改不会导致构建中断或某些意外故障时,您才希望运行这些测试。这种情况下的解决方案是通过特定的稳定变更集编号下载测试源。

通过特定的 tfs 变更集获取源代码

从 tfs 下载代码的默认方式是使用 源代码管理 选项卡。 team foundation server 选项是通过安装 team foundation server 插件添加的

但是,如果您使用过该插件,您就会知道无法将其配置为通过特定的变更集编号下载源代码。所以要通过特定的变更集下载源代码,应该添加一个新的 Windows 批处理命令。









在新添加的框中,应添加以下命令。


 %tfs% workspaces -format:brief -server:{your-tfs-team-project-collection-url}
%tfs% workspace -new hudson-%job_name%-master;{your-domain-user-name} -noprompt -server:{your-tfs-team-project-collection-url}
%tfs% workfold -map $/{tfs-path-to-your-sln} c:\jenkins\jobs\%job_name%\workspace\ -workspace:hudson-%job_name%-master -server:{your-tfs-team-project-collection-url}
%tfs% get $/{tfs-path-to-your-sln} -force -recursive -version:%changesetnumber% -noprompt
%tfs% history $/{tfs-path-to-your-sln} -recursive -stopafter:1 -noprompt -version:%changesetnumber% -format:brief -server:{your-tfs-team-project-collection-url}


您只需要用您的信息更改大括号“{}”内的代码段。该代码将使用您的 jenkins 作业的名称 创建 一个 新的 tfs 工作区 。接下来它将 生成 一个 映射 到您的 tfs 项目路径 本地文件夹 。最后,它将通过 特定的变更集编号 下载 源代码 。它通过参数 %changesetnumber% 传递给命令。因此您需要创建一个名为 changesetnumber 的字符串类型的新作业参数。


获取最新代码windows批处理命令

可以使用类似的命令来获取最新的源代码。


 %tfs% workspaces -format:brief -server:{your-tfs-team-project-collection-url}
%tfs% workspace -new hudson-%job_name%-master;{your-domain-user-name} -noprompt -server:{your-tfs-team-project-collection-url}
%tfs% workfold -map $/{tfs-path-to-your-sln} c:\jenkins\jobs\%job_name%\workspace\ -workspace:hudson-%job_name%-master -server:{your-tfs-team-project-collection-url}
%tfs% get $/{tfs-path-to-your-sln} -force -recursive -version:%changesetnumber% -noprompt
%tfs% history $/{tfs-path-to-your-sln} -recursive -stopafter:1 -noprompt -version:%changesetnumber% -format:brief -server:{your-tfs-team-project-collection-url}


这些命令是相同的,只是有一点不同——缺少 %changesetnumber% 参数。

结合获取最新代码并通过特定的变更集编号获取

如果你想创建一个多用途的 jenkins 作业,能够以两种模式运行 - 获取最新版本并通过特定的变更集编号获取。如果 %changesetnumber% 留空,将触发第一种模式。为此,需要对前面提到的命令进行一些小的调整。


 %tfs% workspaces -format:brief -server:{your-tfs-team-project-collection-url}
%tfs% workspace -new hudson-%job_name%-master;{your-domain-user-name} -noprompt -server:{your-tfs-team-project-collection-url}
%tfs% workfold -map $/{tfs-path-to-your-sln} c:\jenkins\jobs\%job_name%\workspace\ -workspace:hudson-%job_name%-master -server:{your-tfs-team-project-collection-url}
%tfs% get $/{tfs-path-to-your-sln} -force -recursive -version:%changesetnumber% -noprompt
%tfs% history $/{tfs-path-to-your-sln} -recursive -stopafter:1 -noprompt -version:%changesetnumber% -format:brief -server:{your-tfs-team-project-collection-url}


删除 tfs 工作区

作为新的构建后步骤,应添加清理命令以 删除 先前创建的 tfs 工作空间


 %tfs% workspaces -format:brief -server:{your-tfs-team-project-collection-url}
%tfs% workspace -new hudson-%job_name%-master;{your-domain-user-name} -noprompt -server:{your-tfs-team-project-collection-url}
%tfs% workfold -map $/{tfs-path-to-your-sln} c:\jenkins\jobs\%job_name%\workspace\ -workspace:hudson-%job_name%-master -server:{your-tfs-team-project-collection-url}
%tfs% get $/{tfs-path-to-your-sln} -force -recursive -version:%changesetnumber% -noprompt
%tfs% history $/{tfs-path-to-your-sln} -recursive -stopafter:1 -noprompt -version:%changesetnumber% -format:brief -server:{your-tfs-team-project-collection-url}