Terraform UI:Semaphore UI 与 Gaia 对比

Denis GukovSemaphore UI 创始人兼 CTO
阅读约需15分钟

Gaia 和 Semaphore UI 都提供基础设施自动化 Web 界面。Gaia 提供 Terraform 模块和 stack 自助目录,Semaphore UI 在运行 Terraform/OpenTofu 的同时支持 Ansible、Terragrunt、Bash、PowerShell 和 Python,覆盖预配与后续操作。本文比较 Gaia 2.4.0 与 Semaphore UI 2.20.0。

与 AI 讨论本文

概述

Terraform 模块能创建环境,但共享流程不只是运行 apply。用户需要提供正确输入、使用相应凭据,并找到生成的 state 和输出。服务器与服务随后还需配置、备份、更新以及他人可重复执行的运维流程。

Gaia 将预配包装为 Terraform 服务目录。作者发布模块,用户创建单独配置的 stack,作业为资源执行 plan、apply 或 destroy。每个 stack 围绕一个基础设施实例,保留自己的变量、凭据、state 和执行历史。

Semaphore UI 将预配纳入更广泛的自动化服务。Terraform/OpenTofu 模板可使用 workspace、可复用变量和启动表单。Ansible 模板增加清单和主机配置,Bash、PowerShell、Python 和 Terragrunt 操作使用同一项目与执行模式。工作流连接步骤,计划让后续维护也留在该界面。

Semaphore UI 项目中用于多种自动化工具的任务模板。
Semaphore UI. 预配置的 Ansible、基础设施即代码和命令行操作共享项目任务列表。
Gaia stack 视图,包含输入变量、Terraform 作业和输出。
Gaia. 模块实例作为 stack 管理,拥有自己的输入、作业和 state。图为官方文档示例。 来源

快速对比

两款产品都让用户运行基础设施代码,无需在每台笔记本重建设置。主要区别是共享服务管理的范围,从 Terraform 模块目录,到预配、Ansible 配置和周期性操作。

Gaia 与 Semaphore UI:主要特性
对比项 Semaphore UI Gaia
自动化工具 Ansible, Terraform/OpenTofu, Terragrunt, Bash, PowerShell, Python Terraform
可复用单位 任务模板和工作流 Terraform 模块与独立配置的 stack
安装方式 二进制程序、软件包、Docker、Kubernetes Java 应用、Docker Compose、Kubernetes
运行时依赖 数据库、Git 和所选工具 Java 应用、MongoDB 和 Docker/Kubernetes runner
执行 在服务器本机或 Runner 上 使用 Docker 或 Kubernetes 的独立 runner
执行计划 Cron 表达式和单次执行 通过 plan/apply 作业 API 的外部调度器
工作流 相互连接的 Ansible、IaC 和脚本模板 Terraform plan/apply 阶段、外部编排
State 存储 现有 backend 或 Pro 内置 HTTP backend 内置 stack state backend
输入 输入表单、可复用变量组和机密信息 模块变量、默认值和验证
资产清单 可复用 Ansible 定义及发现插件 每个 stack 的 Terraform 资源和输出
访问控制 项目角色,Enterprise 支持自定义角色 管理员和用户角色、按组织控制模块访问
凭据 Key Store 和外部机密信息存储 云凭据、可选 Vault 集成
许可 MIT 许可的 Community 版,商业 Pro 版与 Enterprise 版 MPL 2.0 开源

Gaia 集中保存获准模块及其单独 stack 实例,开源项目包含内置 Terraform state 存储。Semaphore UI 围绕团队现有工具和配置准备操作。因此,预配作业可以与环境全生命周期使用的 Ansible playbook 和维护作业共享界面。

更广泛范围不意味着每项作业都必须变成工作流。同事可以单独运行预配置备份或服务重启,工程师则在需要时连接预配和配置。

功能对比

可复用输入、清单和凭据让同事无需重建配置即可运行操作。执行设置决定运行位置,计划、工作流和记录结果则支持预配后的工作。

安装与配置

共享自动化服务可在现有服务器或容器平台运行。应用与作业运行时是独立部署选择。

支持部分支持不支持
安装与配置: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
独立的原生二进制文件 支持 不支持需要 Java 运行时
原生 Linux 软件包 支持 不支持Java 应用分发包
Docker 部署 支持 支持Docker Compose 服务
Kubernetes 部署 支持 支持

Gaia 将 Java Web 应用、MongoDB 数据库与执行运行器分开部署。运行器在 Docker 容器或 Kubernetes Pod 中启动 Terraform,并可配置并行作业数上限。Docker Compose 可将这些服务组合起来,实验性的 Helm Chart 则提供 Kubernetes 安装方式。

Semaphore UI 可以二进制文件或原生软件包运行,也可在 Docker 或 Kubernetes 中部署。团队将日常自动化从工程师的笔记本迁出时,可从现有服务器起步,使用同一服务执行 Terraform 资源预配与 Ansible 维护。作业是否需要容器取决于所选的执行模式。

自动化工具

预配、主机配置和服务维护使用不同工具。直接模板让团队独立运行这些流程,Terraform provisioner 则将命令关联到资源生命周期。

支持部分支持不支持
自动化工具: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
Terraform / OpenTofu 支持 部分支持Terraform 模块,无 OpenTofu 模板
Ansible playbook 支持 部分支持包含 Ansible 运行时的 provisioner
直接运行 Terragrunt 作业 支持 不支持Terraform 命令生命周期
Bash 支持 部分支持包含所需解释器的 provisioner
PowerShell 支持 部分支持包含所需解释器的 provisioner
Python 支持 部分支持包含所需解释器的 provisioner
独立 Ansible 和脚本操作 支持 不支持RUN 和 DESTROY stack 作业

Gaia 通过生成的 Terraform 命令序列运行 Terraform 模块。只要运行器镜像或远程目标提供必要工具,Terraform provisioner 就能调用 Ansible 或命令行程序。这可以配置新预配的资源,但该命令仍属于 Terraform 运行的一部分,而不是独立的 Gaia 操作。其标准命令构建方式不提供独立的 OpenTofu 或 Terragrunt 模板。

Semaphore UI 为 Ansible、Terraform/OpenTofu、Terragrunt、Bash、PowerShell 和 Python 提供直接运行的模板。团队可以使用 OpenTofu 创建基础设施、使用 Ansible 配置软件包,再通过 Python 检查就绪状态。之后,Ansible 配置或 PowerShell 维护操作可以独立运行,无需再次启动 Terraform 生命周期。Pro 内置的 state backend 还能将 Terraform/OpenTofu state 及其历史与这些作业放在一起管理。

操作配置与输入

作者只需准备一次配置,同事便可请求执行可重复的操作。Gaia 保存模块及其 stack 实例,Semaphore UI 则保存可重复用于资源预配和维护的模板。

支持部分支持不支持
操作配置与输入: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
保存的操作配置 支持任务模板 支持模块与 stack
输入表单 支持 支持
变量配置与复用 支持跨模板共享的命名变量组 支持模块默认值与各 stack 的变量值
输入校验 支持必填字段、整数检查及选项 支持必填值与正则表达式

Gaia 的模块作者定义源代码仓库、Terraform 版本与变量结构。用户根据模块创建 stack,并提供适合自身环境的变量值和云凭据。stack 成为持久化实例,拥有自己的 state 和作业,适用于供用户独立请求的基础设施目录。Gaia 支持必填值和可配置正则表达式校验。Semaphore UI 的输入表单可校验必填字段、整数和选项,但没有等效的可配置正则表达式规则。

Semaphore UI 将保存的操作称为 Task Template。它将代码仓库、工具配置、变量以及操作所需的资产清单或凭据组合起来。命名的 Variable Groups 可跨模板复用环境配置,输入表单字段则收集运行时输入。例如,服务重启模板可提供服务和环境选项,无需同事自行构造命令。资源预配模板也可采用同样的方式收集环境参数。

Terraform 生命周期

实用的 Terraform 界面不能只负责启动命令,还需要将代码、输入、state 以及用户获准请求的操作以可重复的方式关联起来。

支持部分支持不支持
Terraform 生命周期: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
Terraform plan 与 apply 支持 支持
独立的环境实例 支持预先配置的模板与 workspace 配置 支持由模块创建的 stack
环境专用的 state 与凭据 支持配置的 backend、workspace 与凭据 支持独立的 stack state 与云凭据
销毁环境 支持Terraform/OpenTofu destroy 操作 支持销毁作业
默认应用先前保存的 plan 不支持 不支持
内置 state 存储 支持Pro 支持

Gaia 根据 stack 配置的模块、输入和云凭据运行 plan、apply 与 destroy。其内置 backend 保存该 stack 的 state,stack 页面则汇集输出和作业历史。因此,即使多个测试环境来自同一模块,也可以保留各自独立的 state 与执行记录。

Semaphore UI 使用 Task Template 选择 Terraform/OpenTofu 代码仓库、workspace 和配置。Variable Groups 可在相关作业间复用配置,输入表单在启动时收集参数。工程师只需准备一次环境预配操作,同事便可通过保存的配置发起请求。每个环境也需要独立的变量、凭据和 backend state。Gaia 用独立 stack 实例表示这些内容。在 Semaphore UI 中,团队需要准备相应的模板、workspace 和 backend 配置。workspace 隔离取决于 backend,因此仅选择 workspace 并不能在所有 backend 中实现 state 隔离。除 Terraform 外,Terragrunt 和 OpenTofu 也可直接选择为模板类型。

Semaphore UI Terraform 模板配置,包含代码仓库、workspace 和变量组。
Semaphore UI. Terraform 模板将源代码、workspace 和可复用变量组合为预先配置的操作。
Gaia 模块编辑器,显示代码仓库配置、授权团队和可编辑的输入变量。
Gaia. 模块定义其代码仓库、授权团队和输入校验。图为项目官方示例。 来源

State 是该配置中独立的一部分。Gaia 无需商业许可证即可为每个 stack 提供 state backend。Semaphore UI 使用 Terraform/OpenTofu 代码中配置的 backend,Pro 还提供内置 HTTP state backend,支持历史记录和界面管理。将 backend 保留在 Semaphore UI 中,可使共享 state 与修改它的作业放在一起,而无需再添加一个 state 服务。

两款产品默认都不会应用先前保存的 plan 文件。Gaia 2.4.0 会显示规划结果,但其 apply 命令不使用保存的 plan 文件。Semaphore UI 的默认执行也会分别运行 plan 与 apply。如果审批必须对应完全相同的拟议变更,则流程需要明确保存并复用该 plan。

资产清单

补丁更新或证书检查作业需要以可重复的方式选择主机。Ansible 资产清单用于此目的,而 Terraform state 描述 stack 管理的资源。

支持部分支持不支持
资产清单: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
可复用的 Ansible 资产清单 支持界面定义或 Git 中的文件 不支持没有资产清单资源
动态主机发现 支持Ansible 资产清单 插件 部分支持生成资产清单,或从 Terraform 调用 Ansible

Gaia 将 Terraform 资源和输出保存在各自的 stack 中。Terraform 输出可以提供 provisioner 或其他系统所需的主机地址,但不会在 Gaia 界面中创建 Ansible 资产清单资源。通过 provisioner 调用 Ansible 时,必须在该自动化流程中传入或生成资产清单。

Semaphore UI 将 Ansible 资产清单保存为可复用的项目资源。团队可以编辑静态定义、使用 Git 中的文件,或由 Ansible 资产清单插件在作业运行时发现主机。同一资产清单可用于部署、补丁更新和证书检查。当资源预配只是工作的起点,而操作人员需要在主机群整个生命周期中持续维护时,这一点尤其有用。

执行

执行配置决定哪台机器访问目标,以及由它提供哪些依赖。两种平台均可在私有基础设施中执行作业,但对于不使用容器的作业,它们提供的选择不同。

支持部分支持不支持
执行: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
不使用容器的作业 支持 不支持Terraform 作业运行器需要 Docker 或 Kubernetes
远程执行 支持Runner 支持独立的 Gaia Runner
Docker 作业执行 支持Pro 支持
Kubernetes 作业 Pod 支持Enterprise 支持

Gaia 将应用与运行器分离。运行器请求待执行的 Terraform 步骤,并在 Docker 容器或 Kubernetes Pod 中运行,可配置并发数。只要能访问 Gaia API 以及模块所使用的服务,运行器就可以部署在私有基础设施附近。所选镜像提供 Terraform,以及 provisioner 所需的其他程序。

Semaphore UI 可以在应用服务器或靠近目标的运行器上执行作业。这样,小型部署可以不依赖容器平台起步,大型部署则可通过运行器访问不同网络。Pro 增加项目运行器与 Docker 作业执行,Enterprise 增加 Kubernetes 作业 Pod。将 Web 应用安装在 Docker 中,与让每个作业在独立容器中执行,是两个不同的选择。

执行计划

基础设施作业需要在指定时间运行或自动重复执行时,调度就非常重要。Semaphore UI 可直接调度预先配置的模板。Gaia 需要外部调度器协调 Terraform stack 作业。Semaphore UI 的任务模型覆盖更多操作,同一调度界面也可用于独立的备份、补丁更新和证书检查。

支持部分支持不支持
执行计划: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
Cron 调度 支持 部分支持由外部调度器调用作业 API
单次定时运行 支持 部分支持由外部调度器调用作业 API

Semaphore UI 为预先配置的模板保存 cron 与单次调度。夜间备份、定期证书检查或补丁更新作业,可以复用作者选择的资产清单、凭据和启动配置。手动与定时运行会出现在同一执行历史中。

Gaia 2.4.0 没有调度界面。外部调度器可以通过 POST /api/stacks/{id}/{jobType} 创建 RUN 或 DESTROY 作业,再通过 POST /api/jobs/{jobId}/plan 启动 plan。plan 完成后,需要另行向 /api/jobs/{jobId}/apply 发送 POST 请求以应用变更。调度器必须处理这一生命周期并检查最终作业结果,而不能将作业 ID 的创建视为运行完成。

工作流

完整的环境操作流程可以包括资源预配、主机配置和服务验证。Gaia 管理 stack 作业的 plan/apply 阶段,而 Semaphore UI 将独立操作及其结果连接起来。

支持部分支持不支持
工作流: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
跨工具的可视化工作流 支持 不支持没有混合工具工作流编辑器
审批步骤 支持 部分支持在 Terraform plan 与 apply 之间确认
操作之间传递变量值 支持 部分支持通过代码或 API 集成读取 stack 输出

Gaia 引导 stack 完成规划与应用。其界面在 plan 后提供单独的确认步骤,销毁 stack 时也一样。Terraform provisioner 可在该生命周期内执行其他操作,外部系统也可以通过 API 协调多个作业。Gaia 不提供由可独立复用的 Ansible、Terraform 和脚本操作组成的可视化图。

Semaphore UI 通过可视化工作流连接保存的模板,支持审批、成功和失败路径。发布流程可以依次预配基础设施、等待审批、配置主机并执行验证步骤,同时每个模板仍可用于后续维护。使用服务器或运行器上的本地执行器时,可在步骤之间传递收集的变量值。生成的文件和保存的 Terraform plan 仍需要可访问的存储或明确的传输步骤。两款产品默认都不会应用先前保存的 Terraform plan。

访问控制

共享资源预配模块与委派预先配置的服务重启操作,需要不同的权限边界。访问设置应允许作者准备操作,并授予同事使用操作所需的权限。

支持部分支持不支持
访问控制: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
基于角色的访问 支持项目角色 支持角色与模块组织
自定义角色 支持Enterprise 不支持固定的应用角色
外部身份登录 支持ProLDAP 和 OIDC 支持GitHub 与 GitLab OAuth2、LDAP

Gaia 使用组织共享模块,并提供管理员和用户角色。模块作者可以向团队提供经批准的 Terraform 定义,用户则为自己的 stack 提供配置。GitHub 和 GitLab 集成将 OAuth2 登录与代码仓库导入结合起来,同时也支持 LDAP。

Semaphore UI Community 在项目内组织共享自动化。项目角色控制用户能否查看、运行或编辑项目中的自动化。拥有执行权限的同事可以启动部署、备份或维护作业,并查看结果。工程师负责准备操作,同事使用保存的配置和启动输入。

需要将访问限制在特定操作时,Enterprise 提供自定义角色和模板级执行权限。例如,团队可以委派服务重启模板,而不授予操作人员通用的项目编辑权限。这种边界由角色权限和操作配置共同形成,而不是单靠输入表单。Pro 为使用统一身份提供方的团队增加 LDAP 和 OIDC 登录。Semaphore UI Pro 还为本地账户提供 TOTP 双因素认证。

密钥管理

用于云资源预配的凭据与用于配置主机的 SSH 凭据是不同的资源。共享服务应能够复用它们,而不要求操作人员在每次运行时粘贴机密信息。

支持部分支持不支持
密钥管理: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
已保存凭据 支持SSH 密钥与密码 支持云凭据对象
HashiCorp Vault 支持Pro机密信息查询 支持Transit 加密与动态 AWS 凭据
内置 OpenBao 查询 支持Pro 不支持
内置 AWS Secrets Manager 查询 支持Enterprise 不支持
内置 Azure Key Vault 查询 支持Enterprise 不支持
内置 Devolutions Server 查询 支持Enterprise 不支持
内置 CyberArk 查询 支持EnterprisePVWA REST API 不支持

Gaia 提供 AWS、Google Cloud 和 Azure 云凭据。其可选 Vault 集成使用 Transit 引擎进行加密,并可向 Vault secrets engine 请求动态 AWS 凭据。这些凭据用于 Terraform stack 生命周期。

Semaphore UI 的 Key Store 支持团队操作流程使用的凭据,包括 Ansible 主机的 SSH 密钥与密码。预先配置的操作引用这些存储条目,无需操作人员在每次启动时粘贴凭据。Pro 增加 HashiCorp Vault 和 OpenBao 机密信息查询,Enterprise 增加 AWS Secrets Manager、Azure Key Vault 和 Devolutions Server 集成,以及通过 PVWA API 连接 CyberArk。

例如,同一环境可以使用云凭据预配资源,再使用 SSH 密钥执行后续 Ansible 配置。它们仍是独立的凭据,分别关联相应操作。两款平台都可以使用 Vault,但 Gaia 的加密和动态凭据功能,与为作业查询已存储机密信息的方式不同。Gaia 内置凭据类型没有上述其他机密存储的连接器。Terraform 代码可通过自己的数据源或外部命令检索机密信息,此时查询由自动化代码配置和维护,而不是通过 Gaia 凭据界面管理。

日志与审计

作业运行后,操作人员需要查看结果,并获得足够的上下文来排查失败。对于同一环境,Terraform stack 历史与 Ansible 主机结果回答的是不同的问题。

支持部分支持不支持
日志与审计: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
执行历史与日志 支持 支持
运行发起者与时间戳 支持 支持
内置 Ansible 主机与任务报告 支持Pro 不支持Terraform plan/apply 输出
管理审计界面 支持登录与记录的操作 不支持作业历史,没有管理审计界面

Gaia 记录 stack 作业的用户、状态、时间以及 plan/apply 步骤。这些历史记录可帮助团队检查环境预配变更并排查 Terraform 输出。它记录的是 stack 操作,而不是 Ansible 主机报告或管理审计界面。

Semaphore UI 保存所有支持工具的任务历史。Pro 的 Ansible 摘要增加主机与任务结果,帮助操作人员找出哪些服务器未能通过补丁更新或证书检查。其审计日志将登录和支持的管理操作与任务输出分开记录。因此,同时执行资源预配和主机维护的团队,可以在同一服务中调查这些操作,而无需将 Terraform state 当作服务器所有操作的报告。Pro 增加审计筛选和导出,包括向团队 SIEM 流水线发送 Syslog 与 Splunk HEC 数据。

集成与 AI 辅助工作

现有流水线或服务可以通过 API 请求执行预先配置的自动化。代码仓库集成将代码引入服务,而事件驱动的连接还需要可靠的结果跟踪方式。

支持部分支持不支持
集成与 AI 辅助工作: Gaia 与 Semaphore UI
对比项 Semaphore UI Gaia
REST API 支持 支持
Git 代码仓库 支持 支持导入 GitHub 与 GitLab 模块
入站自动化 Webhook 支持请求匹配和输入提取 部分支持由外部接收器调用作业 API

Gaia 从 GitHub 或 GitLab 导入模块,并提供 stack、作业及结果 API。CI 流水线或外部请求服务可以创建 stack 作业、开始规划并决定何时应用。Webhook 驱动的配置需要一个适配器完成这些调用并跟踪结果。Semaphore UI 提供 REST API,以及用于匹配请求并将请求值映射到预先配置的任务输入的入站集成 Webhook。

如果团队保留 Gaia 的 Terraform 目录,可以通过 API 集成,在资源预配完成后触发 Semaphore UI 的 Ansible 配置或维护模板。之后,由 Semaphore UI 管理该操作的资产清单、凭据和执行记录。这是团队自行实现的连接,并非内置 Gaia 到 Semaphore 集成。两个项目也都公开文档和源代码,编码助手可以参考这些资料来编写连接逻辑,或调查配置和作业输出。

许可与支持

Gaia 和 Semaphore UI 都有免费的自托管开源版本。在考虑付费功能之前,两者的范围就已不同:一个是 Terraform 模块目录,另一个是支持多种自动化工具的服务。商业功能和支持是选型时需要单独考虑的部分。

开源与商业选项

Gaia 采用 MPL-2.0 许可证,包含 Terraform stack state backend。Semaphore UI Community 采用 MIT 许可证,提供支持工具的模板、工作流、调度、项目角色与执行历史。Pro 增加内置 state backend、项目运行器、Docker 任务执行和外部密钥库集成。Enterprise 增加更细致的访问、执行和可用性控制。

对于同时需要 Terraform 资源预配与周期性 Ansible 操作的团队,Community 的这些功能已经能够构成共享自动化服务。是否需要 Pro 或 Enterprise,取决于 state、访问和执行需求,而不是仅仅因为使用多种工具。

维护与支持

Gaia 最新发布版本为 2.4.0,发布于 2022 年 8 月 12 日。截至 2026 年 10 月 21 日核查时,应用代码仓库的 main 分支仍指向同一提交。采用它的团队需要评估当前依赖,并自行维护所需的变更。

Semaphore UI 持续发布版本,并在同一产品系列内提供厂商支持。Community 提供尽力而为的协助,Pro 包含工作时间内的厂商支持,Enterprise 提供定制支持选项。团队可以从 Community 的共享作业开始,随着运营需求增长获取商业功能或支持。

如何选择

首先考虑团队希望如何请求和管理基础设施。Gaia 围绕模块目录和独立 stack 实例组织资源预配。Semaphore UI 围绕可复用的 Terraform/OpenTofu 模板、变量和执行配置组织操作,并通过调度与工作流覆盖更完整的流程。两者都能用于资源预配,选择取决于运行模式,以及同一界面是否还需要支持其他自动化。

何时选择 Gaia

如果需求是发布经批准的 Terraform 模块,并让用户创建自己的 stack 实例,Gaia 是一种专注于此的选择。

  • 独立 stack 实例是核心服务。 每个请求的环境都需要自己的输入、凭据、state 以及 plan/apply/destroy 历史,而配置管理和维护由其他系统负责。
  • 内置 state 存储很重要。 你希望在同一开源产品中获得模块目录和 Terraform state backend,且团队能够负责应用与运行器的维护。

何时选择 Semaphore UI

如果希望获得可复用的 Terraform/OpenTofu 操作、灵活的执行方式与商业支持选项,或者资源预配需要连接 Ansible、Bash、PowerShell 和 Python,可以选择 Semaphore UI。

  • 你需要多种部署和支持选择。 在现有服务器上通过二进制文件或原生软件包起步,按需添加远程执行,并在同一产品系列内获得 Pro 或 Enterprise 功能与厂商支持。
  • 资源预配之后仍需执行 Ansible 工作。 同一服务需要使用现有资产清单、凭据和 playbook 配置主机,并执行补丁更新、证书检查或备份。
  • IaC 代码已经定义了你维护的环境。 为 Terraform/OpenTofu 或 Terragrunt 模板配置所需变量、凭据和 state,再让同事运行或调度这些操作。这适合希望共享执行现有配置的团队,而不必围绕模块目录和单独请求的 stack 实例组织整个服务。
  • 操作流程组合了多种工具。 通过可复用模板和工作流,Terraform/OpenTofu 或 Terragrunt 资源预配可以衔接 Ansible 配置、Bash 或 PowerShell 操作以及 Python 检查。

常见问题

同事能否根据同一配置创建独立环境?

Gaia 只需发布一次 Terraform 模块,用户便可创建拥有各自输入、凭据和 state 的独立 stack。Semaphore UI 使用模板、输入表单、Variable Groups 和 Terraform/OpenTofu workspace。在 Semaphore UI 中准备环境请求时,应为各环境提供适当的 workspace 和 backend state 配置。

在 Semaphore UI 中应使用哪种 state backend?

Semaphore UI 可以保留 Terraform/OpenTofu 代码中已配置的 backend。Pro 还提供支持历史记录和界面管理的内置 HTTP backend。Gaia 在开源产品中包含 stack state backend。迁移启动界面时,需要保留各环境、其配置与 state 之间的对应关系。

能否在私有环境内执行?

可以。Gaia Runner 与 Web 应用分离,在 Docker 容器或 Kubernetes Pod 中执行 Terraform。Semaphore UI 可在自身服务器或独立运行器上执行任务,Pro 可选用逐任务 Docker 执行,Enterprise 可选用 Kubernetes 执行。执行机器需要能够访问目标基础设施和所需服务。

资源预配能否继续衔接 Ansible 配置与维护?

在 Semaphore UI 中可以。工作流可连接 Terraform/OpenTofu 资源预配、Ansible 配置和验证任务。各模板仍可用于后续备份、更新或服务操作,调度则可重复执行维护。Gaia 的内置生命周期侧重 Terraform plan、apply 和 destroy,后续操作由其他系统处理。

能否将 Gaia 模块目录直接迁入 Semaphore UI?

底层 Terraform 代码可以复用,但 Gaia 的模块与 stack 目录模型,与 Semaphore UI 的模板和 workspace 模型不同。需要将各环境的输入、凭据引用、backend state 和执行依赖映射到预先配置的操作。

本文对你有帮助吗?

参考来源

  1. Gaia contributors, “Gaia v2.4.0 release”. URL: https://github.com/gaia-app/gaia/releases/tag/v2.4.0 (访问日期: ).
  2. Gaia, “Gaia concepts”. URL: https://docs.gaia-app.io/getting-started/concepts/ (访问日期: ).
  3. Gaia, “QuickStart”. URL: https://docs.gaia-app.io/getting-started/quick-start/ (访问日期: ).
  4. Gaia, “Gaia Runner configuration”. URL: https://docs.gaia-app.io/configuration/runner-configuration/ (访问日期: ).
  5. Gaia contributors, “Mozilla Public License 2.0”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/LICENSE (访问日期: ).
  6. Gaia contributors, “Gaia v2.4.0 source code”. URL: https://github.com/gaia-app/gaia/tree/v2.4.0 (访问日期: ).
  7. Gaia, “GitHub integration”. URL: https://docs.gaia-app.io/configuration/github-integration/ (访问日期: ).
  8. Gaia, “GitLab integration”. URL: https://docs.gaia-app.io/configuration/gitlab-integration/ (访问日期: ).
  9. Semaphore UI, “Installation”. URL: https://semaphoreui.com/docs/admin-guide/installation (访问日期: ).
  10. Semaphore UI, “Applications”. URL: https://semaphoreui.com/docs/user-guide/apps (访问日期: ).
  11. Semaphore UI, “Terraform/OpenTofu”. URL: https://semaphoreui.com/docs/user-guide/apps/terraform (访问日期: ).
  12. Semaphore UI, “Task Templates”. URL: https://semaphoreui.com/docs/user-guide/task-templates (访问日期: ).
  13. Semaphore UI, “Workflows”. URL: https://semaphoreui.com/docs/user-guide/workflows (访问日期: ).
  14. Semaphore UI, “Runners”. URL: https://semaphoreui.com/docs/admin-guide/runners (访问日期: ).
  15. Semaphore UI, “Semaphore UI editions”. URL: https://semaphoreui.com/pricing (访问日期: ).
  16. Semaphore UI, “Variable Groups”. URL: https://semaphoreui.com/docs/user-guide/environment (访问日期: ).
  17. Gaia, “Gaia interface example”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/README.md (访问日期: ).
  18. Gaia contributors, “Terraform plan and apply command construction”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/java/io/gaia_app/runner/RunnerCommandBuilder.java (访问日期: ).
  19. Semaphore UI, “Terraform execution implementation”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/db_lib/TerraformApp.go (访问日期: ).
  20. Semaphore UI, “Inventory”. URL: https://semaphoreui.com/docs/user-guide/inventory (访问日期: ).
  21. Semaphore UI, “Schedules”. URL: https://semaphoreui.com/docs/user-guide/schedules (访问日期: ).
  22. Semaphore UI, “Semaphore cron and one-time schedule execution”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/services/schedules/SchedulePool.go (访问日期: ).
  23. Semaphore UI, “Task history and output”. URL: https://semaphoreui.com/docs/user-guide/tasks (访问日期: ).
  24. Semaphore UI, “Team roles and extended RBAC”. URL: https://semaphoreui.com/docs/user-guide/team#extended-rbac (访问日期: ).
  25. Semaphore UI, “Key Store”. URL: https://semaphoreui.com/docs/user-guide/key-store (访问日期: ).
  26. Semaphore UI, “Semaphore local execution, workflow outputs, inventory paths, host limits and branch overrides”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/services/tasks/local_executor.go (访问日期: ).
  27. Gaia contributors, “Stack job launch API for RUN and DESTROY”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/java/io/gaia_app/stacks/controller/StackRestController.java#L104-L123 (访问日期: ).
  28. Gaia contributors, “Independent stacks, variables and credential references”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/java/io/gaia_app/stacks/bo/Stack.java (访问日期: ).
  29. Semaphore UI, “External secret storage types in the Semaphore UI 2.20 candidate”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/db/SecretStorage.go (访问日期: ).
  30. Gaia contributors, “Gaia 2.4.0 built-in credential types”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/java/io/gaia_app/credentials/Credentials.kt (访问日期: ).
  31. Semaphore UI, “CyberArk secret storage for Enterprise”. URL: https://semaphoreui.com/docs/user-guide/key-store/cyberark (访问日期: ).
  32. Gaia contributors, “Gaia 2.4.0 application routes”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/client/app/router.js (访问日期: ).
  33. Gaia contributors, “Gaia RUN and DESTROY job types”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/java/io/gaia_app/stacks/bo/JobType.java (访问日期: ).
  34. Gaia contributors, “Configurable Terraform runner image”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/java/io/gaia_app/modules/bo/TerraformImage.kt (访问日期: ).
  35. Gaia contributors, “Runner scripts, stack inputs and execution environment”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/java/io/gaia_app/runner/RunnerController.java (访问日期: ).
  36. Gaia contributors, “Separate plan, apply and retry API actions”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/java/io/gaia_app/stacks/controller/JobRestController.kt (访问日期: ).
  37. Gaia contributors, “Stack job identity, user, timing and execution steps”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/java/io/gaia_app/stacks/bo/Job.java (访问日期: ).
  38. HashiCorp, “Terraform provisioners and command execution”. URL: https://developer.hashicorp.com/terraform/language/provisioners (访问日期: ).
  39. Semaphore UI, “Audit log and external log forwarding”. URL: https://semaphoreui.com/docs/admin-guide/audit-log (访问日期: ).
  40. Semaphore UI, “Incoming integrations and webhooks”. URL: https://semaphoreui.com/docs/user-guide/integrations (访问日期: ).
  41. Semaphore UI, “Reusable Git repositories”. URL: https://semaphoreui.com/docs/user-guide/repositories (访问日期: ).
  42. Gaia contributors, “Stack state API used to retrieve Terraform outputs”. URL: https://github.com/gaia-app/gaia/blob/v2.4.0/src/main/java/io/gaia_app/stacks/controller/TerraformStateController.java (访问日期: ).

本比较由 Semaphore UI 团队依据上方列出的文档、仓库和产品信息编写。每条来源均记录了访问日期。