2016-02-20 59 views
1

我有两个构建(在TeamCity的):WebDeploy:合并内容

指产生一个后端的一个网站,用的WebAPI。

我包的网站WebDeploy这样:

/p:DeployOnBuild=True /p:PublishProfile="Default" /p:ProfileTransformWebConfigEnabled=False

它提供了我一个很好的WebDeploy.zip

现在我有第二次构建,它建立并编译一个网站前端。

前端和后端由不同的团队开发,从而在不同的时间产生工件。

我希望能够部署一个版本,在合并前端后端的。

现在我有2个选择,要么依赖于前端(这将创建一个新的不必要的版本)重建后端,或其他的东西(这是我真正想要的)。

我想,给定一个web部署包,合并在前端的文件中,将网站部署到IIS。

现在我可以手动解压webdeploy软件包并手工重建它。然而,那里的路径是基于它所建立的位置的路径(我无法控制它)。

实施例:C_C\TeamCity\...blabla...\obj\Release\Package\PackageTmp\Web.config

这使得它很难找出结构而不用解析在WebDeploy包的根中发现的archive.xml

这是可能的,但理想情况下,我想要一个MSBuild命令,它允许我将目录的内容“合并”到本网站中。

问:

  1. 这可能与MSDeploy?
  2. 如果这是不可能的,是否有可能改变WebDeploy包中的目录名称,以便让我更加直接,因为当我想注入其他文件时?

回答

1

你可以在包部署到使用dirPath提供商的本地目录,添加文件,然后重新包装。首先,您需要创建目标清单,因为WebDeploy使用源清单创建程序包。您可以创建一个“DestManifest.xml”文件,内容如下:

<?xml version="1.0" encoding="utf-8"?> 
<sitemanifest> 
    <dirPath path="c:\repackagewebdeploy" /> 
    <auto /> 
    <auto /> 
</sitemanifest> 

然后就可以调用MSDeploy解包和重新打包。

msdeploy -verb:sync -source:package=c:\packagePath\package.zip -dest:manifest=[path to destination manifest] 
[copy files] 
msdeploy -verb:sync -source:dirPath=c:\repackagewebdeploy -dest:package=c:\packagePath\newPackage.zip 

这是假设你不需要其他SETACL提供商。我们通常不需要这些,因此我忽略它们,但是可以使用清单将它们添加回最终的包中,而不是直接使用dirPath。

+0

不幸的是,提供者'package'与提供者'dirPath'不兼容。 '错误:源(sitemanifest)和目标(dirPath)对于给定的操作不兼容。 错误计数:1.' – Snake

+0

是的,忘记了清单。我更新了我的答案以解释清单并对其进行了测试,所以我知道这一次它是有效的。如果您有任何其他问题,请告诉我。 – chief7