作者:Mitchell Hashimoto
译者:ysyou
“
一款可以让开发者在任意平台以相同体验构建、部署和发布应用的工作流工具。
”
今天我们很高兴公开 [HashiCorp Waypoint](https://www.waypointproject.io/) 项目,它为开发者提供了一个跨平台的构建、部署和发布应用的工作流,而且在所有平台中都可以获得一致的使用体验!借助 Waypoint 你的应用从开发到上线将只需一个配置文件和一个命令 `waypoint up`。
Waypoint 默认支持了 Kubernetes, HashiCorp Nomad, Amazon ECS, Google Cloud Run, Azure Container Instances, Docker, Buildpacks 等平台和工具,而且可以通过插件机制来支持任意工具和平台。在应用部署之后,Waypoint 还提供了 logs, exec 等特性来辅助应用的调试。
Waypoint 是一款可以独立运行的工具,支持管理自建基础设施或平台中的应用,不需要依赖任何 HashiCorp 的托管服务。
01
解决部署的复杂性问题
我们开发 Waypoint 的原因很简单:带给开发者最直接简单的部署体验!
在 HasiCorp 我们有机会能够和社区上各种类型的组织和个人一起合作:我们每天都会通过 Github Issuers、讨论组、邮件和几十位开发者进行交流,每周还会和500多个公司讨论他们当前所面临的开发与运维挑战。这让我们看到了开发者在部署应用的过程中所遇到的一系列挑战。
我们发现一些开发者(尤其是中大型组织的开发者)已经被部署的复杂性所淹没了:容器、调度器、YAML 配置、Serverless 等。虽然这些复杂性为应用带来了更多的功能,但也给我们带来了陡峭的学习曲线,让应用的部署变得越来越困难。
另外我们还发现开发者在不同环境中部署应用时所使用的工具经常是不一样的:在 kubernetes 环境中使用 docker 和 kubectl,在虚拟机环境中使用 Packer 和 Terraform,在 Serverless 环境中使用平台特有的命令行工具。对于个人来说,这种割裂的部署体验进一步增加了我们的学习曲线。对于团队来说,这是一个关于一致性和复杂性的挑战。
我们开发 Waypoint 的目的就是为了解决上述开发者和团队所面临的两个挑战。Waypoint 提供了一个非常简单的命令(`waypoint up`)来将任意的应用部署起来。而且这套工作流在任意的环境中体验都是完全一致的。除此之外,Waypoint 还可以通过插件来适配自定义的构建、部署和发布逻辑。
Waypoint 将为开发者们彻底解决应用部署所遇到的挑战,让部署变得简单!
02
功能速览
Waypoint 提供了一系列功能来支撑应用部署、验证和调试的工作流,这些功能也让 waypoint 成为一款跨平台的强大部署工具。
03
工作流示例
接下来我们将使用一个示例应用来展示 Waypoint 的各个功能。在本文的演示中我们略过了一些初始化步骤,你可以在我们的[快速开始文档](https://www.waypointproject.io/docs/getting-started "快速开始文档")中找到完整的示例步骤。在这个演示中,我们将会把示例应用部署到一个 kubernetes 环境中。 首先我们需要在应用的项目下创建一个 `waypoint.hcl` 文件,这个文件描述了如何构建、部署和发布我们的应用。
project = "HashiCorp Waypoint"
app "waypoint-up" {
build {
use "docker" {}
registry {
use "docker" {
image = "hashicorp/wpmini"
tag = gitrefpretty()
}
}
}
deploy {
use "kubernetes" {
probe_path="/"
service_port=80
}
}
release {
use "kubernetes" {
load_balancer=true
port=80
}
}
}
04
构建、部署、发布
Waypoint 的配置文件中描述了应用生命周期的三个主要阶段:构建、部署和发布。 构建阶段负责将应用的源码转化为交付物(比如 Docker 镜像、EC2 AMI 等)。构建的过程中可能会涉及到仓库的配置,因为通常我们需要将交付物推送到仓库中后才能被部署平台使用。 部署阶段负责将之前构建好的交付物部署到目标平台中,并获取部署好的应用访问地址。Waypoint 支持 Kubernetes、Nomad、EC2、ECS 和 Google Cloud Run 等平台。 发布阶段会将上个阶段部署的应用开放给最终用户。我们未来还会为应用发布添加更多的特性,比如:多环境推进(应用在前一个环境验证成功后才会推进到下一个环境部署),部署和发布回滚,灰度发布。
05
Waypoint Up
执行 `waypoint up` 命令就可以完成应用的构建、部署和发布,最终会输出一个或多个应用访问地址。无论是什么类型的应用和平台,你都可以使用 `waypoint up` 完成应用的部署。
当然你也可以使用 Waypoint 单独执行应用的构建、部署或发布阶段,这会让 Waypoint 更容易地集成到其它 CI/CD 工具链中。你可以在[使用 Waypoint 自动化应用工作流](https://waypointproject.io/docs/automating-execution)这篇文章中看到更多的细节。
06
应用预览
Waypoint 默认会为部署的应用生成一个以 `waypoint.run` 为域名且有合法证书的可公开访问的 URL。你可以使用这个 URL 快速预览应用或将应用分享给其他人。这个 URL 是由 HasiCorp 的托管服务免费提供的。这个功能也是可以关闭的。
在这个示例中,我们获得的 URL 是 `https://recently-pleasant-duck--v1.waypoint.run `。(当你看到这篇文章时这个链接已经失效了) 当你需要访问某个版本的部署时你可以修改 `https://recently-pleasant-duck--vN.waypoint.run ` 这个 URL 中的 `N` 为目标版本。通过这个功能你可以很容易地将应用的预发布版本提前分享给团队伙伴。
07
查看日志
Waypoint 默认提供了查看实时应用日志的功能。
我们可以在命令行和 Web 界面中查看聚合后的应用日志,这在我们需要调式应用行为时是非常方便的。请注意 Waypoint 的日志功能并不是为了替代当前成熟的日志解决方案,只是为了提升开发调试的体验。 Waypoint 的日志功能是跨平台的,无论你使用的是 Kubernetes、EC2、Google Cloud Run 还是其它平台,你都可以用相同的方式查看应用的实时日志。通过 Waypoint Web 界面你可以更容易地查看到部署在不同平台的不同应用的日志。
08
EXEC调试
通过 `waypoint exec` 命令你可以进入到应用部署的环境中执行命令。
这个功能可以让你在应用的部署环境中打开一个 shell 窗口、运行脚本或做些其他想做事情。和日志功能一样,exec 功能同样是跨平台的。
09
更多特性
上面的功能特性还只是 Waypoint 功能的一个缩影。
Waypoint 还支持使用环境变量管理应用的配置,你可以将 waypoint 集成到 CI 或 Github 中,你可以使用 workspaces 功能为某个分支创建特定的环境,你还可以通过编写插件做更多的事情。此外,目前 Waypoint 还是一个全新的项目,我们希望在接下来的几个月中为 Waypoint 带来更多的特性。
10
在已有应用中集成Waypoint
如果你已经有一些应用和对应的部署工作流了,你可能会担心是否可以很容易地迁移到使用 Waypoint 管理应用。对此我们不希望你立即使用 Waypoint 完全重建应用的工作流。
与之相反,我们提供了 `docker-pull` 之类的插件和本地执行模式来让 Waypoint 可以被集成到应用先前的工作流中。除此之外,我们还提供了文档介绍如何将 Waypoint 集成到如 CircleCI 和 Jenkins 之类的 CI 系统中。 这会让你的已有应用也可以很容易地拥有部署历史、EXEC 调试、日志查看等特性。只需要很小的成本,你就可以立即获得 Waypoint 带来的很多特性,在此之后你可以再考虑是否要迁移到使用 Waypoint 管理应用。 如果你有多个应用,你还可以混合使用 Waypoint 的各个功能:在一些已有部署工作流的应用中使用 Waypoint exec 插件,在一些新的应用中使用基于 buildpack 的构建方案。当然,无论是哪种方式,你都可以使用 `waypoint up` 命令将你的应用部署到线上。
11
通过插件扩展Waypoint
Waypoint 的构建、部署、发布逻辑都是可以使用插件进行扩展的。Waypoint 使用了和 Terraform 相同的插件系统,我们相信为 Waypoint 编写插件至少会和编写 Terraform 插件一样容易。 Waypoint 已经内置了十几个插件了,我们希望在开源社区的帮助下插件的数量能得到大幅的增长。最初发布 Terraform 的时候,我们内置了6个 providers。而现在, Terraform 已经支持超过300个 providers 了。我们相信 Waypoint 在应用部署领域会和 Terraform 一样得到快速地成长。 如果你对编写 Waypoint 插件感兴趣,欢迎查阅我们的[插件编写文档](https://www.waypointproject.io/docs/extending-waypoint)并浏览下 Waypoint [内置插件的源码](https://github.com/hashicorp/waypoint/tree/main/builtin)。 原文链接:
https://www.hashicorp.com/blog/announcing-waypoint