8

是否可以发布网站而不是将其构建为 FAKE 脚本的一部分?

4

2 回答 2

7

我自己没有这方面的经验,但看起来有两种方法可以手动运行 Web 部署过程。一个(看起来较旧)是使用特殊目标调用 MSBuild(如此处所述),另一个选项(看起来更现代)是使用 MSDeploy 工具(具有命令行界面)。

这两个都应该很容易从 FAKE 脚本中调用。这是一个调用命令行工具的示例:

Target "Deploy" (fun _ ->
    let result =
        ExecProcess (fun info -> 
            info.FileName <- "file-to-run.exe"
            info.Arguments <- "--parameters:go-here"
        ) (System.TimeSpan.FromMinutes 1.0)     
    if result <> 0 then failwith "Operation failed or timed out"
)

调用 MSBuild 脚本应如下所示:

Target "BuildTest" (fun _ ->
    "Blah.csproj"
    |> MSBuildRelease "" "ResolveReferences;_CopyWebApplication" 
    |> ignore
)

正如我所说,我没有测试过这个(所以它可能是完全错误的),但希望它可以在一些 Web 部署或 FAKE 专家来到 SO 之前为您指明一个有用的方向!

于 2013-05-10T03:23:37.197 回答
5

这是一种方法。(实际上它并不能完全回答这个问题,因为没有构建就不会执行发布。)

  • 决定哪些目标需要发布网站。
  • 使它们依赖于“构建”目标。
  • 如果需要发布,请使用发布配置文件让“构建”目标发布站点。

这是build.fsx说明这种方法的一段代码:

let testProjects = @"src/**/*Tests.csproj"

let requestedTarget = getBuildParamOrDefault "target" ""
let shouldDeploy =
    match requestedTarget with 
    | "Test" | "AcceptanceTest" | "Deploy" -> true
    | _ -> false


// *** Define Targets ***
Target "BuildApp" (fun _ ->
    let properties =
        if shouldDeploy
        then [ ("DeployOnBuild", "true"); ("PublishProfile","LocalTestServer.pubxml") ]
        else []
    !! @"src/**/*.csproj"
      -- testProjects
        |> MSBuildReleaseExt null properties "Build"
        |> Log "Build-Output: "
)

// Other targets and dependencies omitted.

使用此代码,当运行目标“Test”、“AcceptanceTest”、“Deploy”之一时,网站将根据 .xml 中定义的发布配置文件发布LocalTestServer.pubxml

于 2014-04-09T14:20:01.937 回答