TFS 2015 发布管理 - 工件类型:文件共享错误:System.IO.FileNotFoundException:找不到指定的文件

Posted

技术标签:

【中文标题】TFS 2015 发布管理 - 工件类型:文件共享错误:System.IO.FileNotFoundException:找不到指定的文件【英文标题】:TFS 2015 Release Management - Artifact Type: FileShare Error: System.IO.FileNotFoundException: Unable to find the specified file 【发布时间】:2020-01-27 22:15:32 【问题描述】:

我正在使用 TFS 2015 Release 将构建部署到 DEV、QA 和 UAT 环境。 我正在部署一个 C# WPF 应用程序。

    我已对包含的数据库项目进行了更改,现在我已将“.sql”脚本添加到 我的 Visual Studio 解决方案中的输出目录。我检查 更改,构建通过。 我在发布管道中创建了一个新版本,并使用新的 已创建构建。 问题:我的发布管道未能在发布上部署 步骤“下载工件”。

我需要新包含的“.sql”文件来扩展我们的发布管道,因此我需要找到一种方法来包含这些文件。

这是从失败的部署步骤获取的“下载 artifacts.log” 文件。在新包含的“.sql”文件之前,此步骤将通过。

    2019-09-27T12:43:12.0760185Z Cleaning artifacts directory: C:\ST-BuildAgent\AgentA\9d128ed82…
    2019-09-27T12:43:12.2244465Z Cleaned artifacts directory: C:\ST-BuildAgent\AgentA\9d128ed82
    2019-09-27T12:43:12.2263995Z Number of linked artifacts to download: 2
    2019-09-27T12:43:12.2273760Z Starting artifacts download...
    2019-09-27T12:43:12.2390940Z Downloading linked artifact: Application Main - Continuous...
    2019-09-27T12:43:12.2390940Z Downloading artifact of type: Build
    2019-09-27T12:43:12.2400705Z Created artifact folder C:\ST-BuildAgent\AgentA\9d128ed82\Application Main - Continuous
    2019-09-27T12:43:12.2527650Z Preparing to get the list of available artifacts from build.
    2019-09-27T12:43:12.3631095Z Preparing to download artifact: Application Main - Continuous_20190927.2
    2019-09-27T12:43:12.3699450Z Artifact Type: FileShare
    2019-09-27T12:43:14.8404900Z Preparing to get the list of available artifacts from build.
    2019-09-27T12:43:14.8854090Z Preparing to download artifact: Application Main - Continuous_20190927.2
    2019-09-27T12:43:14.8854090Z Artifact Type: FileShare
    2019-09-27T12:43:15.9234285Z Preparing to get the list of available artifacts from build.
    2019-09-27T12:43:15.9790890Z Preparing to download artifact: Application Main - Continuous_20190927.2
    2019-09-27T12:43:15.9790890Z Artifact Type: FileShare
    2019-09-27T12:43:17.0171085Z Preparing to get the list of available artifacts from build.
    2019-09-27T12:43:17.0551920Z Preparing to download artifact: Application Main - Continuous_20190927.2
    2019-09-27T12:43:17.0551920Z Artifact Type: FileShare
    2019-09-27T12:43:18.0912585Z Preparing to get the list of available artifacts from build.
    2019-09-27T12:43:18.1518015Z Preparing to download artifact: Application Main - Continuous_20190927.2
    2019-09-27T12:43:18.1518015Z Artifact Type: FileShare
    2019-09-27T12:43:18.1879320Z Error: System.IO.FileNotFoundException: Unable to find the specified file.
    2019-09-27T12:43:18.1879320Z    at Microsoft.TeamFoundation.Release.Windows.Implementation.FileSystemFile..ctor(String fullPath)
    2019-09-27T12:43:18.1889085Z    at Microsoft.TeamFoundation.Release.Windows.Implementation.FileSystemDirectory.<>c.<GetFiles>b__8_0(String fullPath)
    2019-09-27T12:43:18.1889085Z    at System.Linq.Enumerable.<>c__DisplayClass7_0`3.<CombineSelectors>b__0(TSource x)
    2019-09-27T12:43:18.1889085Z    at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
    2019-09-27T12:43:18.1889085Z    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
    2019-09-27T12:43:18.1898850Z    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
    2019-09-27T12:43:18.1898850Z    at Microsoft.TeamFoundation.DevOps.Diagnostics.DiagnosticsPolicyExecutor.Execute[T](Func`1 func, String methodName)
    2019-09-27T12:43:18.1898850Z    at Microsoft.TeamFoundation.Release.ArtifactRepository.FileShare.FileShareArtifact.DownloadArtifact(ArtifactDefinition artifactDefinition, String dropLocation, String localFolderPath)
    2019-09-27T12:43:18.1898850Z    at Microsoft.TeamFoundation.Release.ArtifactRepository.Build.BuildArtifact.DownloadArtifact(BuildArtifact buildArtifact, ArtifactDefinition artifactDefinition, String localFolderPath, BuildHttpClient buildClient, Int32 buildId)
    2019-09-27T12:43:18.1908615Z    at Microsoft.TeamFoundation.Release.ArtifactRepository.Build.BuildArtifact.Download(ArtifactDefinition artifactDefinition, String localFolderPath)
    2019-09-27T12:43:18.1908615Z    at Microsoft.TeamFoundation.Release.ArtifactRepository.Common.AgentArtifactDownloader.Download(ArtifactDefinition artifactDefinition, Uri workingFolder)
    2019-09-27T12:43:18.1908615Z    at Microsoft.TeamFoundation.DistributedTask.Plugin.Release.ReleaseJobExtension.<>c__DisplayClass19_0.<DownloadArtifacts>b__0()
    2019-09-27T12:43:18.1908615Z    at Microsoft.TeamFoundation.Release.Windows.Implementation.RetryExecutor.Execute(Action action)
    2019-09-27T12:43:18.1918380Z    at Microsoft.TeamFoundation.DistributedTask.Plugin.Release.ReleaseJobExtension.DownloadArtifacts(ITaskContext downloadArtifactTaskContext, IJobContext context, IList`1 agentArtifactDefinitions, Uri artifactsWorkingFolder, String teamProjectId, IDictionary`2 savedSettings)
    2019-09-27T12:43:18.1918380Z    at Microsoft.TeamFoundation.DistributedTask.Plugin.Release.ReleaseJobExtension.DownloadArtifactsWrapper(IJobContext context, IJobRequest job, CancellationToken cancellationToken, ITaskContext downloadArtifactTaskContext, String teamProjectId, Uri artifactsWorkingFolder, Int32 releaseId, IDictionary`2 savedSettings)

我的尝试 我已经撤消了我的代码更改,签入了更改,构建了应用程序,并成功发布了应用程序。在下载工件步骤中成功。

我尝试了两种不同的方法将“.sql”脚本文件放入构建工件文件夹中

    我在数据库的构建后事件中使用了 XCOPY 命令 将特定文件复制到的构建输出路径的项目 应用程序。 或者,我尝试手动更改“.sql”文件设置 复制到输出目录总是复制

这两种技术都将我想要的文件复制到构建工件中。

请让我知道接下来我应该尝试什么。 谢谢

【问题讨论】:

不要发布到文件共享。更改它以将文件存储在 TFS 实例中。另外,请考虑升级到不到 5 年的 TFS 版本。 @DanielMann 将文件发布到文件共享有什么问题?作为自动化 CI 构建的一个步骤,我们将构建和工件发布到文件共享。这样,我们可以将工件用于发布定义或在不同的 QA 系统上手动安装构建。我们也在升级到 DevOps 2019。 【参考方案1】:

发现问题

构建工件的文件路径太长...当发布代理启动作业时,它会将所有链接的构建工件拉到构建代理的工作文件夹中。

在我的例子中,我正在复制嵌套在名称较长的文件夹中的文件,而脚本文件本身的名称非常长。

解决方案

以某种方式缩短文件名。 XCOPY 有一个缩短文件名的开关。这对我来说很好用。

XCOPY /n - 使用 NTFS 短文件或目录名称创建副本。当您将文件或目录从 NTFS 卷复制到 FAT 卷或目标文件系统需要 FAT 文件系统命名约定(即 8.3 个字符)时,需要 /n。目标文件系统可以是 FAT 或 NTFS。

【讨论】:

以上是关于TFS 2015 发布管理 - 工件类型:文件共享错误:System.IO.FileNotFoundException:找不到指定的文件的主要内容,如果未能解决你的问题,请参考以下文章

TFS 2015 更新 3 Vnext 构建定义复制除父项目之外的所有工件

如何在 TFS Linux 代理中下载工件?

如何构建仅签入代码文件以及如何仅签入该构建的 tfs 中的代码工件?

使用 TFS Build Server 2015 转换 web.config

TFS/Azure DevOps 上的发布工件的位置在哪里

在发布 TFS 中发布文件