WebDeploy:合并内容
WebDeploy: merge content
我有 2 个构建(在 TeamCity 中):
使用 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 命令,它允许我将目录的内容 'merge' 放入此网站。
问题:
- MSDeploy 可以吗?
- 如果那不可能,是否可以更改 WebDeploy 包中的目录命名,以便在我想注入其他文件时使用更直接的东西?
您可以使用 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 拉取。
我有 2 个构建(在 TeamCity 中):
使用 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 命令,它允许我将目录的内容 'merge' 放入此网站。
问题:
- MSDeploy 可以吗?
- 如果那不可能,是否可以更改 WebDeploy 包中的目录命名,以便在我想注入其他文件时使用更直接的东西?
您可以使用 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 拉取。