TFS2015 脚本只能部署(而不是构建)吗?

Can a TFS2015 script only Deploy (and not Build)?

我是使用 TFS2015 编写脚本的新手。我创建了一个脚本来构建我的解决方案中的所有项目(这是一个相当大的解决方案)并将其放在一个共享文件夹中(每个项目都有自己的子文件夹)。

我想为每个项目创建一个单独的脚本,只需从共享文件夹中复制 bin 文件夹并将其粘贴到我的测试环境中。我很少需要部署所有东西,所以我的想法是一次构建……多次部署。

但是,当我 运行 我的部署脚本使用 Copy Files 步骤时,它正在执行另一个构建。虽然它复制了我期望的文件,但它是在完整构建之后为构建创建文件夹结构的。

我可以让 Copy Files 步骤不执行构建吗?

这是我的脚本当前正在执行的步骤:

如您所见,只有一个步骤(复制文件),但它仍然执行 Get sources 并将所有内容复制到构建框上的一个新文件夹中,就像这样(其中数字不断增加脚本的每个 运行):

我只想将文件从 Source 复制到 Target,而不是构建或 Get Sources

您似乎仍在使用 TFS 2015 RTM 或 Update 1。如果将其与随此版本引入的新构建系统的生命周期进行比较,这已经是相当古老的技术了。

TFS 2015 update 2 has introduced a similar system to the Build pipelines to orchestrate Releases。这不需要您映射任何工作区或 git 存储库,并且可以对您构建的工件或仅对文件共享的内容进行操作。

Build 必须构建一些东西并且为了构建一些东西,它必须得到要构建的东西,这是有道理的。如果您实际上没有构建某些东西,那么您可能正在部署、发布或打包其他东西。因此构建和发布管道之间的区别。

TFS 2017+ 有一个选项 disable the syncing of sources。主要是为了让人们以创造性的方式自己获取资源(例如调用 git.exe 的自定义 powershell 脚本)。

我的主要建议是升级到 TFS 2018 update 3 or at least TFS 2017 update 3.1, worst case TFS 2015 update 4.1. The fact that versions older than update 2015.4.1 have a known XSS scripting security bug 可能足以说服您的组织执行此更新。

除了该选项,您还剩下一个解决方案:

Link 你的构建定义要么到 git 存储库只有一次提交(如果我没记错的话,2015 代理在同步一个空的 Git 存储库时仍然崩溃)或 link 它到一个 TFVC 存储库并设置工作区设置以隐藏所有内容。这实质上会导致构建在调用您的 powershell 脚本之前同步一个空文件夹,它可以缓存该文件夹。