Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在TFS中为发布管理提供xml/json配置 我在Team Foundation Server 2015更新3的前提下发布版本定义,这是发布管理的新的基于Web的版本。这利用了由部署所需的多个服务组成的工件。我们有一个Powershell脚本,用于部署所有服务并正确配置环境_Powershell_Tfs_Release Management - Fatal编程技术网

如何在TFS中为发布管理提供xml/json配置 我在Team Foundation Server 2015更新3的前提下发布版本定义,这是发布管理的新的基于Web的版本。这利用了由部署所需的多个服务组成的工件。我们有一个Powershell脚本,用于部署所有服务并正确配置环境

如何在TFS中为发布管理提供xml/json配置 我在Team Foundation Server 2015更新3的前提下发布版本定义,这是发布管理的新的基于Web的版本。这利用了由部署所需的多个服务组成的工件。我们有一个Powershell脚本,用于部署所有服务并正确配置环境,powershell,tfs,release-management,Powershell,Tfs,Release Management,也就是说,每个环境都是不同的(不同的数据库,不同的配置)。用于部署的Powershell脚本需要一些配置,这些配置不容易通过发布管理中的变量选项卡作为普通变量插入(因为对象/阵列)。我们希望在配置中使用json/xml文件作为用于部署的Powershell脚本的输入 我的问题是,我们如何为不同的环境(也为生产环境)管理这些json/xml文件,并使它们仅在TFS中对应的平台上可访问?这不会使环境能够访问/查看非其自己的配置文件。同样,如果配置不是代码的一部分,那么所有开发人员都可以使用配置,这也

也就是说,每个环境都是不同的(不同的数据库,不同的配置)。用于部署的Powershell脚本需要一些配置,这些配置不容易通过发布管理中的变量选项卡作为普通变量插入(因为对象/阵列)。我们希望在配置中使用json/xml文件作为用于部署的Powershell脚本的输入


我的问题是,我们如何为不同的环境(也为生产环境)管理这些json/xml文件,并使它们仅在TFS中对应的平台上可访问?这不会使环境能够访问/查看非其自己的配置文件。同样,如果配置不是代码的一部分,那么所有开发人员都可以使用配置,这也是不可取的

我们将每个部分存储在不同的工件中,因此对于您来说,根据您的工作方式,您可以让CI生成一个主要的“构建”工件,然后生成一系列“开发”、“冒烟测试”、“qa”、“预调试”、“生产”(或您如何命名)工件(可能只是配置文件等)

当您部署构建时,您可以使用“获取工件”任务来获取主构建,并为您正在使用的环境进行适当的配置。很抱歉,我是一个空荡荡的人,这是我们内部编写的任务,我只是太多地使用它,以至于没有注意到它是内置的

我们用两种不同的方法来处理这个问题

一个(或多个)XML/JSON“transforms”文件,可用于更新默认配置(例如一个用于转换app.config并根据需要更新连接字符串的文件),我们使用这种方法从构建中传入一个变量/参数,因此,我们本质上是告诉PowerShell脚本使用一组特定的转换

你可以做的是让你的CI生成一个工件,再加上单独在配置中删除,这样你就可以在不依赖任何奇怪的转换的情况下维护它们。您可以使用带有适当过滤器的“复制和发布构建工件”任务,并为应用程序生成一个工件,一个用于开发配置,一个用于qa配置等


在某些情况下,如果您需要生成不同的包(用于部署到云服务等),您可以重新运行编译步骤并将整个内容/包放入工件中,这样您就有了工件\开发和工件\ qa。。。只要您从同一个CI生成它们,您就应该能够在发布的工件暂存目录(我相信)中获得它们。然后,您的PowerShell将进入artifactStaging/{environment}。

谢谢您的建议。我找不到您所说的“获取工件”任务,这是自定义任务还是需要TFS 2017?除此之外,如果我为每个环境创建一个不同的工件,这可能会为我们的生产环境添加数百个工件,不是吗?Arg,对不起,我真是个白痴,我们开发了自己的任务,去一个命名的构建并获取一个命名的工件。。。我会更新我的评论。但是在这个解决方案中,在我的例子中,如果您希望每个生产环境都有一个工件,那么您将拥有数百个工件。但是,如果您有一个工件包含所有配置文件的集合,那么发布代理将始终将每个生产环境的所有配置文件下载到代理位置,该位置可以位于客户的网络中。这两种解决方案似乎都不理想,或者我不完全理解您的解决方案。您的CI构建可能会产生许多工件,它们会保存到服务器。当(发布)构建运行时,它会将所有工件下载到代理yes。如果您在他们的场所设置代理,我不确定是否有解决此问题的灵丹妙药,而不进行奇怪/复杂的设置(例如将其配置存储在blob存储中,并让您的安装程序对此进行查询)。我假设您在他们的场所安装代理,因为您没有远程访问目标服务器的权限?您的假设是正确的,在您描述的情况下,将导致生产系统上每个环境的所有配置,而不仅仅是那里需要的配置。