我有一个 jenkins master,它使用 Linux 构建代理来使用官方 MS Linux docker 容器构建我的 ASP.NET Core 网站。
我之前使用安装了必要工具的 Windows VM 来构建这些项目,并使用 MSDeploy.exe 将站点部署到 IIS Web 服务器。对于此部署,我创建了一个 Web 包。
在我的 Linux docker 容器中,我显然无法使用 MSDeploy.exe。
如何从 Linux docker 容器将 ASP.NET Core 网站保存到 IIS Web 服务器?
MSDeploy.exe 使用本地 IIS 用户凭据连接到 IIS,关闭应用程序,替换新包中也存在的所有文件,因此它不仅替换文件,而且还围绕实际替换进行一些安全设置。
我在这里找到了这个问题,但不幸的是那里没有找到真正的答案。
提前致谢
如果您想从 Linux 机器(无论是桌面还是 CI 服务器)使用它, 您需要从安装了
msdeploy
的 Windows 计算机复制文件。
(您也可以从网站下载安装程序并解压
来自 .msi
文件的文件。这留给读者作为练习。)
sudo mkdir /opt/microsoft/msdeploy
C:\Program Files\IIS\Microsoft Web Deploy V3\*
中的所有文件复制到
Windows 机器到 Linux 机器上的 /opt/microsoft/msdeploy
。/opt/microsoft/msdeploy/msdeploy
:
#!/bin/bash
mono $(dirname $(readlink -f $0))/msdeploy.exe $@
sudo ln -s /opt/microsoft/msdeploy/msdeploy /usr/local/bin/msdeploy
这是如何使用它的示例(假设您正在构建 .NET 8.0;您也可以使用其他框架或 Mono):
dotnet
CLI 发布适用于 Windows x64 的项目:
dotnet publish --runtime win-x64 --framework net8.0 --configuration Release
#!/usr/bin/bash
SOURCE_FOLDER=/path/to/project/bin/Release/net8.0/publish/win-x64
SITE_NAME="SITE\\path"
# I haven't figured out how to do Kerberos authentication, so just doing basic auth here
USERNAME="[email protected]"
PASSWORD='good-password!@#$'
SERVER_HOSTNAME="iisserver01.example.com"
# If you haven't set up certificates for your Web Deploy endpoint,
# you'll need to skip cert hostname verification
ALLOW_UNTRUSTED_CERTIFICATES="true"
# WebDeploy defaults to listen on port 8172 with HTTPS
ENDPOINT="https://$SERVER_HOSTNAME:8172/msdeploy.axd"
DEST_PARAMS='contentPath="'"${SITE_NAME}"'",ComputerName="'"${ENDPOINT}"'",AuthType="Basic",UserName="'"${USERNAME}"'",Password="'"${PASSWORD}"'"'
msdeploy -verb:sync \
-source:contentPath=$SOURCE_FOLDER \
-dest:${DEST_PARAMS} \
-enableRule:AppOffline \
-allowUntrusted=$ALLOW_UNTRUSTED_CERTIFICATES