在FAKE中发布网站(F#Make)

时间:2013-05-09 22:38:20

标签: f# f#-fake

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

2 个答案:

答案 0 :(得分:7)

我自己没有这方面的经验,但看起来有两种方法可以手动运行web deploymnent流程。一个(看起来较旧)是使用特殊目标(如described here)调用MSBuild而另一个选项(看起来更现代)是使用MSDeploy工具(has a command line interface)。

这些都应该很容易从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
)

正如我所说,我没有对此进行过测试(因此可能完全错误),但希望它可以指向一个有用的方向,在某些网络部署或FAKE专家来到SO之前!

答案 1 :(得分:5)

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

  • 决定哪些目标需要发布网站。
  • 让他们依赖“Build”目标。
  • 在需要发布的情况下,使“发布”目标使用发布配置文件发布网站。

以下是来自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.

使用此代码,当其中一个目标 网站上运行“测试”,“AcceptanceTest”,“部署” 根据{{​​1}}中定义的发布配置文件发布。