Ansible 界面:AWX 与 Semaphore UI 对比

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

AWX 和 Semaphore UI 都提供 Web 界面和 API,供团队共同运行自动化任务。本文比较 AWX 24.6.1 与 Semaphore UI 2.20.0,涵盖支持的工具、部署方式、工作流、访问控制和日常维护。

与 AI 讨论本文

概述

Ansible playbook 最初可能只是某位工程师在笔记本电脑上运行的一条命令。当部署、补丁更新和证书续期逐渐成为团队的共同职责时,团队就需要一个统一的入口来启动任务、提供输入、管理凭据并查看结果。AWX 和 Semaphore UI 都提供这一共享层,支持保存任务配置、安排执行计划、管理权限和查看执行历史。

AWX 以 Ansible 为中心组织自动化。团队将 Git 中的 playbook 与资产清单和凭据关联,保存为作业模板,再将多个作业组合成工作流。组织、团队和权限共同决定谁可以使用各项资源。AWX 是开源项目,而 Red Hat Ansible Automation Platform(AAP)是独立的商业产品,拥有自己的支持服务和生命周期。

Semaphore UI 同样以可复用任务为核心,既支持 Ansible playbook,也为 Terraform/OpenTofu、Terragrunt、Bash、PowerShell 和 Python 提供专用模板。项目将这些模板、代码仓库、资产清单、凭据和变量集中管理。工作流可以将基础设施即代码(IaC)资源预配、主机配置及后续维护连接起来,在同一个界面中处理不同工具的操作。

Semaphore UI 项目中的 Ansible、OpenTofu、Terragrunt、Bash 和 PowerShell 任务模板。
Semaphore UI. 不同自动化工具共用项目中的模板列表,列表列项可配置。
AWX 模板列表,展示组织中的 Ansible 作业模板和可复用工作流模板。
AWX. Ansible 作业模板与工作流模板位于同一个列表中,并提供组织信息和启动控件。

快速对比

两款产品都通过已保存的作业、凭据和计划来满足日常 Ansible 运维需求。更广泛的差异体现在工具覆盖范围、部署方式和资源管理上。以下列出双方的主要特性。

自动化工具、安装、执行、工作流、资产清单、访问控制、凭据、变量、许可
对比项 Semaphore UI AWX
自动化工具 Ansible, Terraform/OpenTofu, Terragrunt, Bash, PowerShell, Python Ansible通过 playbook 调用其他工具
安装方式 二进制程序、软件包、Docker、Kubernetes Kubernetes(Operator)、Docker(开发/测试)
服务端平台 Linux, macOS, Windows, FreeBSD Linux 容器(Kubernetes / Docker)
任务执行 在服务器或远程任务执行机上运行 在执行服务器或 Kubernetes 作业 Pod 中运行
工作流 支持,可跨自动化工具构建可视化工作流 支持,可视化 Ansible 工作流,支持复用子工作流
执行计划 Cron 表达式、单次执行 单次与周期性计划
资产清单管理 静态清单、Git 清单、动态插件、NetBox 及其他外部来源 静态与动态清单、托管更新、构建式清单
访问控制 RBAC、项目角色、自定义角色、模板权限LDAP、OIDC、本地 TOTP RBAC、组织与团队角色、按资源设置权限LDAP、OIDC、SAML、通过身份提供商实现 MFA
凭据 Key Store、SSH 密钥、密码、外部密钥库集成 凭据对象、SSH 密钥、密码、外部密钥库集成
变量 可复用变量组、额外变量、环境变量、输入表单 清单、主机及组变量、额外变量、输入表单
许可 MIT (Community)付费版本适用独立的商业条款 Apache 2.0

对于日常 Ansible 作业,两者都提供启动、计划和执行历史功能。主要区别在于如何管理清单与权限、哪些工具可以直接运行,以及如何部署。

此处展示的 Semaphore UI 功能涵盖 Community、Pro 和 Enterprise。可用性标记注明最低所需版本。“许可与支持”介绍商业选项。

功能对比

一次部署可能包含预配基础设施、配置主机,以及在修改生产环境前等待批准。这些步骤在哪里运行、如何交换结果、由谁控制,是两款产品最值得比较的差异。

安装与配置

AWX 推荐使用 Kubernetes 安装。Semaphore UI 也支持独立部署,因此,托管服务所需的基础设施是两者首先体现差异的地方。

支持部分支持不支持
安装与配置: AWX 与 Semaphore UI
对比项 Semaphore UI AWX
独立二进制程序 支持 不支持
原生 Linux 软件包 支持DEB / RPM 不支持
Docker 部署 支持 部分支持仅用于开发和测试
Kubernetes 部署 支持Helm chart 支持AWX Operator
原生 Windows 服务端 支持Ansible 需要 WSL、容器或 Linux runner 不支持Linux 容器
高可用性 支持Enterprise共享数据库、Redis、负载均衡器 支持支持副本,数据库故障转移需另行配置

AWX 推荐的部署方式由 Kubernetes Operator、PostgreSQL 和容器化作业执行组成。其 Docker 配置面向开发和测试。对已有 Kubernetes 经验的团队而言,Operator 符合熟悉的运维模式。如果仅为 AWX 引入集群,就会增加需要维护的基础设施。

Semaphore UI 除了支持通过 Helm 部署到 Kubernetes,还支持二进制程序、原生软件包和 Docker 安装,可使用 SQLite、MySQL 或 PostgreSQL。独立安装可直接利用现有服务器,无需集群,让团队从较小规模开始,并自主选择运维模式。

服务端操作系统与作业执行环境是两个问题。Semaphore UI 提供原生 Windows 服务端二进制程序,但 Ansible 仍需要 Linux、macOS、适当的容器或 WSL。Linux runner 可以为托管在其他环境中的 Web 服务执行作业。两款平台都能通过 Ansible 管理 Windows 目标主机。

在高可用部署中,AWX 的扩展选项和 Semaphore UI Enterprise 的 HA 部署都需要规划数据库故障转移与恢复。离线安装还需要为软件包、执行镜像、更新及适用的付费许可激活安排交付方式。

自动化工具

一次部署可能使用 Terraform/OpenTofu 预配资源、用 Ansible 配置,再用 Python 完成后续操作。AWX 通过 playbook 调用其他工具,Semaphore UI 则提供可直接运行这些工具的任务模板。

支持部分支持不支持
自动化工具: AWX 与 Semaphore UI
对比项 Semaphore UI AWX
Ansible playbook 支持 支持
Terraform/OpenTofu 支持原生任务模板 部分支持通过 Ansible playbook
Terragrunt 支持原生任务模板 部分支持通过 Ansible playbook
Bash 支持原生任务模板 部分支持通过 Ansible playbook
PowerShell 支持原生任务模板 部分支持通过 Ansible playbook
Python 支持原生任务模板 部分支持通过 Ansible playbook

AWX 以 Ansible 为执行核心。只要执行环境中有相应依赖,playbook 就能通过模块或命令调用 Terraform/OpenTofu、Terragrunt、Bash、PowerShell 或 Python。这适合已经使用 Ansible 描述资源预配流程的团队。

Semaphore UI 为这些工具提供各自的模板。团队可以直接运行现有自动化,并通过工作流将其组合起来,无需仅为调用其他工具而额外维护 playbook。例如,OpenTofu 任务预配基础设施,Ansible 任务配置主机,Python 任务完成相关操作,全部通过同一个界面管理。

Semaphore UI Pro 提供内置 HTTP backend,用于存储 Terraform/OpenTofu state,同时支持 workspace 和运行选项。团队可将共享 state 保存在 Semaphore UI 中,无需另行维护 backend。在 AWX 中,被调用的 Terraform 进程使用团队配置的 backend。AWX 的 Terraform State 清单来源会读取 state 来发现主机,但不会存储 state。

Semaphore UI 2.20 的 Terraform 执行有两项重要限制。普通运行会先预览 plan 再执行 apply,但不会自动保存 plan 并应用同一个文件。如果审批必须针对确切的变更方案,需要将流程配置为保存 plan,再将其传递给 apply。此外,除非覆盖默认命令,否则 Terraform 默认命令会禁用 state 锁定,即使 backend 支持锁定也是如此。配置生产运行时应检查这两项设置。

模板与执行计划

AWX 将保存的 Ansible 执行配置称为 Job Template(作业模板),Semaphore UI 则称为 Task Template(任务模板)。每次启动都会在 AWX 中创建一个独立的作业,或在 Semaphore UI 中创建一个独立的任务,分别记录状态、日志和结果。模板保存可复用设置,输入表单和执行计划则控制每次运行的输入值和时间。

支持部分支持不支持
模板与执行计划: AWX 与 Semaphore UI
对比项 Semaphore UI AWX
保存任务配置 支持 支持
输入表单(运行参数) 支持 支持
可复用的变量集 支持多个模板共享的 Variable Groups 部分支持资产清单变量或 Git 中的文件
启动时指定仓库分支 支持 支持
计划执行 支持Cron 表达式和单次执行 支持单次与周期性计划

在 AWX 的 Job Template 中,需要选择项目、playbook、资产清单和凭据,并通过执行环境提供运行时依赖。Semaphore UI 的 Ansible Task Template 则选择仓库、playbook 和资产清单,在同一表单中设置可复用的 Variable Groups 和 Ansible 选项。工程师只需准备一次配置,其他同事便可直接启动操作,无需每次重新配置。

Semaphore UI Ansible Task Template 编辑器,展示仓库、playbook、资产清单、Variable Groups 和启动时输入提示。
Semaphore UI. 包含共享变量和启动选项的 Ansible Task Template。
AWX Job Template 编辑器,展示项目、资产清单、playbook、凭据和执行环境。
AWX. 包含资源选择和启动时输入提示的 Ansible Job Template。

输入表单让同事无需修改 playbook 即可提供启动参数。AWX 支持文本长度范围等验证。Semaphore UI 的 Survey Variables 包含类型化输入、多行文本、密钥及单选或多选。可复用的 Variable Groups 将共享配置与每次启动的输入值分开管理。AWX 可通过资产清单、主机和组变量或 Git 中的变量文件共享配置,而不是通过可在多个模板中选择的独立 Variable Groups 对象。

两者在允许的配置下都能运行仓库中的其他分支。AWX 可以在启动时请求清单、凭据和其他作业设置。Semaphore UI 支持已配置的 Ansible 清单和命令行覆盖。这些选项为工程师提供灵活性,也允许获准流程仅向使用者展示更受限的启动表单。

执行计划将这些启动操作自动化。AWX 使用起始日期、时间和重复规则。Semaphore UI 支持 cron 表达式和单次运行。例如,0 2 * * * 表示每天在调度器配置的时区于 02:00 运行,该时区默认是 UTC。两种方式都适用于备份、主机检查或在非工作时间关闭非生产机器。

Semaphore UI 计划对话框,显示每日 cron 表达式、任务模板和下次运行时间。
Semaphore UI. 带任务输入及下次执行预览的 cron 计划。
AWX 计划表单,显示每日重复规则、时区、结束条件和例外。
AWX. 带时区、重复规则、结束条件和例外的执行计划。

资产清单

两款产品都支持静态文件与动态发现。主要区别在于,发现的主机会成为平台管理的记录,还是由 Ansible 在作业运行时解析。

支持部分支持不支持
资产清单: AWX 与 Semaphore UI
对比项 Semaphore UI AWX
静态资产清单 支持INI/YAML 编辑器与文件 支持主机/组记录及导入的文件
Git 资产清单 支持使用同一仓库或独立清单仓库 支持SCM 项目来源
动态资产清单 支持Ansible 插件与可执行脚本 支持插件、脚本和托管来源
清单刷新 部分支持执行时发现主机 支持定期更新和启动时更新
计算生成的清单组 支持Ansible constructed 插件 支持托管构建式清单
托管事实缓存 不支持需单独配置 Ansible 缓存 支持AWX 存储主机事实
编辑主机与组 部分支持编辑 INI/YAML 定义 支持针对单个主机和组的管理控件

AWX 维护主机和组记录,通过清单更新作业刷新,来源可以是静态文件、Ansible 清单插件或可执行脚本。Semaphore UI 允许团队编辑 INI/YAML 清单,或从 Git 加载,包括独立仓库。插件和脚本在执行时发现主机。核心区别在于平台管理清单的生命周期,还是复用团队的 Ansible 配置。

Semaphore UI Ansible 清单编辑器,以静态 YAML 定义两个预发布 Web 主机。
Semaphore UI. 包含主机组和连接变量的静态 YAML 清单。
AWX 清单,展示单个预发布主机、所属 web 组及逐主机启用开关。
AWX. 包含组归属和逐主机控件的独立主机记录。

例如,netbox.netbox.nb_inventory 插件从 NetBox 数据中发现设备和虚拟机、筛选目标并建立分组。NetBox 仍是权威数据源。AWX 增加更新控制和持久化记录,Semaphore UI 则将配置传给 Ansible。两者都使用 Ansible 插件,而非独立的原生 NetBox 连接器。其他来源包括 AWS、Azure 和 Google Cloud,Semaphore UI 文档还提供了托管在 Git 中、用于 Consul 的 Python 脚本。

AWX 的构建式清单合并已保存的输入清单,并管理生成的主机。Semaphore UI 可以使用 Ansible 的 constructed 插件,根据前置来源构建组和变量。Ansible 缓存插件可保留主机事实,但 Semaphore UI 不提供 AWX 的托管事实缓存。缓存存储、过期策略及 runner 之间的共享仍属于 Ansible 配置。

Semaphore UI 计划在 2.21.0 版本中加入 ARA 风格的 Ansible 报告功能。它将通过展示单个主机及其自动化历史来补充资产清单功能,帮助运维人员了解每台服务器执行了哪些任务、何时执行,以及在哪些环节发生了故障。

如果操作人员需要在平台中查看、刷新和管理主机记录,AWX 的清单模式更适合。若由 Git 定义清单,或由 Ansible 在执行时从 NetBox、云 API 等系统发现主机,则 Semaphore UI 更契合这种设置。

密钥管理

已保存的作业需要使用凭据,而不应要求操作人员每次运行时粘贴密码或云令牌。存储和查询方式决定这些凭据如何提供给作业。

支持部分支持不支持
密钥管理: AWX 与 Semaphore UI
对比项 Semaphore UI AWX
凭据存储 支持 支持
HashiCorp Vault 支持Pro 支持
OpenBao 支持Pro 不支持无内置集成,需测试 Vault 兼容性
AWS Secrets Manager 支持Enterprise 支持
Azure Key Vault 支持Enterprise 支持
Devolutions Server 支持Enterprise 不支持无内置集成,可自行实现连接

AWX 的凭据对象和 Semaphore UI 的 Key Store 都可为已保存的作业提供凭据,无需操作人员每次启动时手动粘贴。两者均集成 HashiCorp Vault、AWS Secrets Manager 和 Azure Key Vault,团队可以继续使用现有服务。

Semaphore UI Vault 存储表单,展示服务器 URL、挂载点、命名空间和令牌来源选项。
Semaphore UI. Vault 连接设置、挂载点和令牌来源。
AWX HashiCorp Vault Secret Lookup 凭据表单,展示连接和身份验证字段。
AWX. Vault 查询连接和身份验证字段,其他设置位于可视区域下方。

其他集成体现了产品差异。AWX 提供 CyberArk Central Credential Provider、CyberArk Conjur 和自定义凭据类型。Semaphore UI 提供专用 OpenBao 和 Devolutions Server 集成。AWX 的 Vault 查询可能适用于兼容服务,但必须针对所需操作验证 OpenBao 兼容性。

应比较团队现有密钥库对应的集成,包括认证方式及作业需要的密钥类型。没有内置集成的服务可能需要自行编写获取代码。

执行

作业需要能够访问目标系统的执行资源。远程工作节点与容器镜像分别解决网络部署位置和运行时依赖问题。

支持部分支持不支持
执行: AWX 与 Semaphore UI
对比项 Semaphore UI AWX
远程执行 支持 支持
专用执行容量 支持Pro项目 runner 支持分配给资源的实例组
执行路由 支持Pro模板或资产清单中的 runner 标签 支持分配给资源的实例组
Ansible role 与 collection 支持从 requirements.yml 安装 支持在项目同步时安装
容器化任务 支持ProDocker 执行器 支持Ansible 执行环境镜像
Kubernetes 作业 Pod 支持Enterprise 支持
并发控制 支持模板、项目和实例级限制 支持并发作业及实例组容量

AWX 将任务发送到执行节点,节点组成实例组,可分配给组织、资产清单或模板。Semaphore UI 在服务器上执行作业,或将其发送给 runner。两种模式都允许执行机器靠近目标系统,同时保持 Web 界面集中管理。

位于私有网络内的 Semaphore UI runner 可以更新主机补丁或续期证书,而不需要 Web 服务器直接连通目标。项目 runner 为项目分配执行容量,模板或清单中的标签将作业路由到匹配的 runner。这适合分布式站点和客户环境。路由标签用于选择机器,本身不提供网络或云账户隔离。

作业运行时决定这些机器上实际运行的内容。AWX 使用包含 Ansible 及其依赖的执行环境镜像,容器组可以为每个作业创建一个 Kubernetes Pod。Semaphore UI 的 Pro 支持按任务使用 Docker,Enterprise 支持 Kubernetes 执行。这些能力不同于将 Web 服务本身托管在容器中。两款产品都能根据仓库中的 requirements 安装 Ansible role 和 collection,其他库和工具则需放在执行机器或其镜像中。

并发控制用于限制同时运行的工作。AWX 结合并发作业设置、执行容量和实例组限制。Semaphore UI 则应用实例、项目和模板级限制。

AWX 还可以自动将大型清单拆分为并行作业。Semaphore UI 可通过带有 Ansible 主机限制的独立运行拆分工作,并通过 runner 标签选择执行机器。团队需要维护这些主机子集及其启动方式。对于滚动更新,Ansible 的 serial 设置控制顺序批次。这些方式适合定向执行和分批发布,而 AWX slicing 为面向整个主机群的并行任务提供自动分区。

工作流

资源预配可能需要规划、审批、部署和主机配置,并根据成功或失败走向不同路径。工作流的组合能力决定这些步骤如何连接。

支持部分支持不支持
工作流: AWX 与 Semaphore UI
对比项 Semaphore UI AWX
可视化工作流编辑器 支持 支持
多个起始节点 不支持 支持
分支汇合 支持 支持
将工作流作为步骤 不支持 支持
成功/失败分支 支持 支持
审批步骤 支持 支持
独立审批者角色 不支持已宣布将在 2.21 中提供 支持
工作流值传递 支持 支持

AWX 工作流连接 Ansible 作业模板,其他工具通过 playbook 调用。Semaphore UI 直接连接 Ansible、Terraform/OpenTofu、Terragrunt、Bash、PowerShell 和 Python 模板。两者都支持成功/失败分支及审批,因此资源预配流程可以在生产变更前暂停。

两者都使用无环图,并在分支汇合处支持所有/任一前置节点条件。AWX 允许多个起始节点。Semaphore UI 从一个节点开始,提供任务、审批、定时延迟和注释节点。

AWX 可在一个工作流中复用另一个完整工作流,将共享的多步骤流程维护在一个位置。它禁止递归执行,并提供仓库和清单更新步骤。Semaphore UI 可以在多个工作流中复用单个任务模板,但不能将工作流嵌入为一步。当多次部署共享的是一组流程,而非单个作业时,这一区别尤为重要。

Semaphore UI 工作流编辑器,包含 plan、审批、部署步骤以及独立的成功与失败分支。
Semaphore UI. 带审批及独立成功、失败路径的部署工作流。
完整 AWX Workflow Visualizer,展示 plan、审批、部署、嵌套发布验证和恢复分支。
AWX. 部署前审批、嵌套验证工作流和故障恢复分支。

AWX 提供可独立分配的审批者角色,管理员也能审批。在 Semaphore UI 2.20 中,审批权限随项目任务执行权限授予。如果团队需要将审批与执行权限分开分配,这就是一个实质差异。Semaphore UI 已宣布将在 2.21 提供独立审批者角色,该版本不在本次比较范围内。

两者都支持通过界面和经过身份验证的 API 审批,AWX 还提供 Ansible 模块。在 Slack 中交互式审批需要调用 API 的集成,单纯发送通知并不足够。

两者都能向后续作业传递值,例如新预配主机的地址。AWX 将 playbook 定义的 set_stats 值作为下游额外变量提供,在执行节点上也适用。playbook 可以用这种方式捕获其他工具的结果。Semaphore UI 收集 Ansible set_stats、Terraform/OpenTofu/Terragrunt 输出,以及 Bash、PowerShell 或 Python 的 JSON,然后通过同名匹配或显式映射,将值传入目标输入表单变量。

在 Semaphore UI 2.20 中,输出收集适用于使用本地执行器的服务器及远程 runner。Docker 和 Kubernetes 执行器暂不产生 输出。值只在任务成功后收集,因此失败分支不能依赖失败任务的输出。这些值对任务查看者可见,不得包含密钥。

两款产品的值传递都不会传输文件。如果不同步骤需要交换已保存的 Terraform plan 或其他产物,应提供双方都可访问的存储。复用同一个 runner 并不保证任务之间的工作目录会保留。

访问控制

支持人员可能需要重启获准的服务,但不应获得服务器的通用登录权限。委派操作时,必须同时限制操作本身及其目标。

支持部分支持不支持
访问控制: AWX 与 Semaphore UI
对比项 Semaphore UI AWX
基于角色的访问控制 支持项目角色,Enterprise 支持自定义角色 支持组织、团队和资源角色
资产清单与凭据的独立权限 不支持资源访问遵循项目角色 支持
模板级执行权限 支持Enterprise 支持
LDAP 和 OIDC 支持Pro 支持
SAML 单点登录 不支持支持 OIDC 支持
双因素身份验证 支持Pro本地 TOTP 支持通过外部身份提供商

AWX 对清单、凭据和作业模板分别授予权限。Semaphore UI 按项目组织访问,Enterprise 提供自定义角色和模板级执行权限,以便更精细地委派操作。预配置模板可以使用选定的清单、凭据和运行设置,向使用者提供获准操作。

例如,Semaphore UI Enterprise 可以让支持人员访问针对指定生产服务器的服务重启模板。Guest 基础角色配合不含项目级权限的自定义角色,可以授予该模板的执行权限。应限制清单、主机范围、变量和其他启动覆盖选项,并检查其他角色是否扩大了访问范围。模板、权限和自动化内容共同定义允许的操作,输入表单只负责收集参数。

这种方式可以委派特定操作,但不会在项目内创建独立的清单或凭据权限。当操作人员需要按各自的访问规则组合资源时,AWX 更接近这一需求。Semaphore UI 的模板权限则适用于一组定义明确、已获批准的流程。

两者都支持 LDAP 和 OIDC 登录。AWX 还支持 SAML,MFA 依赖外部身份提供商。Semaphore UI 提供本地 TOTP 双因素验证。支持 OIDC 的身份提供商可以满足 Semaphore UI 集中登录需求,如果只能使用 SAML,则需要其他集成方式。

日志与审计

作业输出有助于分析执行失败的原因。审计历史记录谁启动了操作或修改了配置,其可见性和保留要求与作业输出不同。

支持部分支持不支持
日志与审计: AWX 与 Semaphore UI
对比项 Semaphore UI AWX
任务历史与日志 支持 支持
任务历史保留 支持按模板保留近期任务 支持按记录时间定期清理
跨项目审计历史 支持管理员审计日志,需启用记录 支持活动流,按角色控制可见性
转发至 SIEM 支持ProTLS Syslog 和 Splunk HEC 支持外部日志服务,包括 Splunk

两款产品都保留任务历史和输出用于排障。审计可见性有所不同:AWX 的活动流遵循资源权限及管理员或审计员角色。Semaphore UI 的跨项目审计视图供管理员使用,启用审计记录后,事件会保存在数据库中。

集中调查时,AWX 的外部日志会转发活动、作业和服务器记录,包括转发到 Splunk。Semaphore UI Pro 增加审计筛选、CSV 或 JSONL 导出,以及通过 TLS Syslog 或 Splunk HEC 转发的功能。两者都能向日志平台或安全信息和事件管理(SIEM)系统提供事件。

本地保留方式不同。AWX 对执行历史和活动流提供按记录时间定期清理。Semaphore UI 按模板保留配置数量的近期任务。中央日志系统可将记录保留得比本地限制更久。

集成

代码仓库变更和服务门户请求都可能触发自动化。API、webhook 和通知将这些事件与作业及其结果连接起来。

支持部分支持不支持
集成: AWX 与 Semaphore UI
对比项 Semaphore UI AWX
REST API 支持 支持
作业 webhook 支持通用端点、匹配规则、值提取 支持GitHub 和 GitLab webhook
作业通知 支持 支持

AWX 内置 GitHub 和 GitLab 作业 webhook,用于由仓库触发的自动化。Semaphore UI 提供通用 webhook 端点,支持请求匹配和任务输入提取。这些端点可以接收不同系统的事件,而两款产品的 REST API 也支持其他调用方。

对于向外发送的通知,AWX 提供邮件、Slack、Rocket.Chat、Mattermost、PagerDuty、AWS SNS、Grafana、IRC、Twilio 和 webhook 通知。Semaphore UI 支持邮件(SMTP)、Telegram、Slack、Microsoft Teams、Rocket.Chat、DingTalk 和 Gotify。这些通知将作业事件报告给人员或服务,而传入的作业 webhook 则用于启动自动化。

服务门户或 ITSM 系统可以调用任一产品的 REST API,启动预配置作业并获取结果。例如,内部门户可以向已保存的模板提交证书续期请求,再向申请人报告完成情况。这是由团队配置的 API 集成,而非专用的原生连接器。

AI 辅助自动化

两款平台都为 Claude Code、Codex 等编程助手提供了有用的资料,包括公开文档、开源代码和有文档说明的 API。助手可以查阅配置示例、检查设置的实现方式,并根据 API 定义起草集成代码。如果提供相关配置和作业输出,助手还可以协助调查故障。因此,即使平台没有内置专用 AI 功能,也可以借助 AI 进行配置和故障排查。

AWX 和 Semaphore UI 都有社区提供的 MCP 连接器。根据具体连接器的能力,助手可以连接到平台,执行查找模板、启动作业和获取结果等操作。这样,团队可以通过助手使用预先准备好的自动化,同时将作业定义和执行保留在平台中。

Semaphore UI 已宣布计划在 2.21.0 版本中为 Pro 提供官方 MCP 支持。

许可与支持

AWX 与 Semaphore UI 都提供免费的开源软件。主要区别在于,随着自动化对运营的重要性提高,团队如何获得商业功能、厂商支持和合同承诺。

开源与商业选项

AWX 采用 Apache 2.0 许可,由社区提供支持。它也是 Red Hat Ansible Automation Platform(AAP)中 automation controller 组件的上游项目。Red Hat 不针对 AWX 本身销售支持订阅。其商业支持产品是 AAP,这是独立的企业平台,将 automation controller、其他组件、认证内容和明确的产品生命周期结合起来。

Semaphore UI 采用 open-core 模式。Community 免费并采用 MIT 许可,Pro 和 Enterprise 则在同一产品系列中增加商业功能与厂商支持。Pro 面向将自动化融入日常运维的小型工程团队。Enterprise 满足更高的访问控制、执行、可用性和支持要求。

因此,两种商业产品面向不同的采购需求。AAP 是范围更广的企业平台投资。Semaphore UI 商业方案面向工程团队和中型组织,同时为复杂或业务关键环境提供 Enterprise 选项。团队可以获得高级控制和厂商支持,并将投入聚焦于所需的自动化服务。

支持与合同承诺

AWX 用户可以通过社区渠道提问、报告缺陷和贡献修复。社区帮助不会形成厂商在特定期限内响应或提供事件支持的义务。AAP 订阅提供的是 Red Hat 对 AAP 的支持,并不会为现有 AWX 安装增加支持覆盖。

Semaphore UI Community 同样按尽力而为原则提供帮助,不包含支持 SLA。Pro 包含工作时间内的厂商支持,Enterprise 则提供定制 SLA 选项,以及入门、配置、升级和迁移协助。因此,商业客户与厂商建立直接关系,支持义务由相应方案和协议规定。

版本与维护规划

AWX 目前表示,由于大规模重构,版本发布已暂停。Semaphore UI 持续发布版本,并通过安全策略明确受支持版本。这些差异影响升级和持续维护规划。应同时审阅计划运行版本的发布历史、安全策略、升级指南以及合同支持承诺。

如何选择

两款平台都让团队共享自动化、安排作业和查看结果。选择应取决于如何管理主机信息、委派操作、托管服务和获取支持。

何时选择 AWX

如果 Ansible 是自动化核心,且其资源管理模式符合团队的日常操作,AWX 是合适的选择。

  • 通过平台管理资产清单是核心需求。 操作人员日常依赖平台维护主机和组记录、刷新清单并保存主机事实。
  • 资产清单和凭据需要各自的访问规则。 团队必须独立于作业模板,为单个清单和凭据分配权限,让操作人员只能组合获准使用的资源。
  • Kubernetes 适合现有基础设施。 团队已经运营集群,因此 AWX 推荐的部署方式与现有系统及技能相匹配。
  • Ansible 已经承担流程编排。 playbook 已覆盖所需操作,包括调用其他工具,并由 Ansible 执行环境提供依赖。
  • 社区支持能够满足需求。 团队有足够的专业知识和能力,在没有厂商响应 SLA 的情况下调查事件、评估安全公告并维护安装。

何时选择 Semaphore UI

如果希望使用简单直接的服务,在现有工具和基础设施上运行并共享自动化,Semaphore UI 是合适的选择。

  • 资产清单已位于 Git 或外部系统中。 希望复用 Ansible 清单定义和插件,在作业运行时从 NetBox、云 API 或其他来源发现主机。
  • 同事需要访问预先准备好的操作。 工程师定义部署、服务重启或证书续期等任务,其他团队成员提供所需输入后启动任务,清单和凭据则保留在预配置中。
  • 希望不使用 Kubernetes 部署。 二进制程序、原生软件包和 Docker 安装允许利用现有服务器,避免仅为自动化服务引入集群。
  • 自动化涉及多种工具。 专用模板直接运行 Ansible、Terraform/OpenTofu、Terragrunt、Bash、PowerShell 和 Python,并通过工作流连接操作。
  • 希望直接获得商业支持。 商业许可在同一产品系列中提供厂商支持和高级功能,因此可以在继续使用 Semaphore UI 的同时获得支持承诺。

常见问题

Semaphore UI 能替代 AWX 吗?

如果其清单、权限和工作流模式满足需求,就可以。现有 playbook 通常可以复用,但需要映射并测试作业配置和访问控制。应检查对 AWX 特有功能的依赖,尤其是嵌套工作流、独立清单或凭据权限,以及托管事实缓存。

可以复用现有 Ansible playbook 吗?

可以从同一个仓库和 playbook 开始。在 Semaphore UI 中配置所需清单、凭据、变量、collection 和运行时依赖,然后进行代表性测试。复用代码并不意味着自动导入所有 AWX 设置。

从 AWX 迁移时需要检查什么?

先选择一个有代表性的工作流,尽可能复用 playbook,再映射清单、凭据、变量、输入表单、计划和运行时依赖。单独验证权限、审批、嵌套工作流以及值或文件传递。导入可以减少配置工作,但不能证明导入的作业行为完全一致。启用生产计划前应进行测试。

哪些 Semaphore UI 功能需要付费版本?

Community 包含核心任务界面和工作流。项目 runner、Docker 执行及外部密钥库集成等功能从 Pro 开始提供。自定义角色、模板权限、Kubernetes 任务执行和高可用性需要 Enterprise。评估方案时应核对所需功能与容量。

迁移后可以保留 SAML 单点登录吗?

AWX 原生支持 SAML。Semaphore UI 支持 LDAP 和 OIDC,但没有原生 SAML 集成。如果身份提供商同时支持 OIDC,可能满足登录需求。用户和组映射需要另行核实,因为更换认证协议不会重建 AWX 权限。

Semaphore UI 必须使用 Kubernetes 吗?

不必。支持二进制程序、软件包和 Docker 安装。Kubernetes 只是可选部署方式。环境仍需具备自动化工具和适当的数据库。

AWX 能运行 Terraform 或使用 HashiCorp Vault 吗?

可以。playbook 能执行 Terraform 命令或 collection 模块,AWX 也支持 HashiCorp Vault 凭据查询。Semaphore UI 使用不同的配置模式,提供 Terraform/OpenTofu 专用模板和可选的 Pro HTTP state backend。

两款平台都支持远程执行吗?

两者都能在远程服务器上运行任务。AWX 使用按不同团队和工作负载分组的执行节点,Semaphore UI 使用 runner 代理。二者的配置与访问模式不同。

本文对你有帮助吗?

参考来源

  1. ARA Records Ansible, “ARA Records Ansible”. URL: https://ara.recordsansible.org/ (访问日期: ).
  2. Semaphore UI, “Semaphore runner output capture and executor limits”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/services/runners/job_pool.go#L167-L192 (访问日期: ).
  3. Semaphore UI, “Semaphore task dispatch, runner routing, concurrency and remote workflow outputs”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/services/tasks/TaskPool.go (访问日期: ).
  4. Semaphore UI, “Semaphore workflow input mapping model”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/db/Workflow.go#L27-L44 (访问日期: ).
  5. Semaphore UI, “Semaphore task template options and survey field types”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/db/Template.go (访问日期: ).
  6. Semaphore UI, “Semaphore NetBox dynamic inventory example”. URL: https://semaphoreui.com/docs/user-guide/inventory/netbox-dynamic-inventory (访问日期: ).
  7. Semaphore UI, “Semaphore Consul inventory script”. URL: https://semaphoreui.com/docs/user-guide/inventory/consul-dynamic-inventory (访问日期: ).
  8. Ansible community, “NetBox Ansible inventory plugin”. URL: https://docs.ansible.com/projects/ansible/latest/collections/netbox/netbox/nb_inventory_inventory.html (访问日期: ).
  9. Ansible community, “AWS EC2 Ansible inventory plugin”. URL: https://docs.ansible.com/projects/ansible/latest/collections/amazon/aws/aws_ec2_inventory.html (访问日期: ).
  10. Ansible community, “Azure Ansible inventory plugin”. URL: https://docs.ansible.com/projects/ansible/latest/collections/azure/azcollection/azure_rm_inventory.html (访问日期: ).
  11. Ansible community, “Google Cloud Ansible inventory plugin”. URL: https://docs.ansible.com/projects/ansible/latest/collections/google/cloud/gcp_compute_inventory.html (访问日期: ).
  12. Semaphore UI, “Semaphore cloning of inventory repositories”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/services/tasks/local_executor_inventory.go (访问日期: ).
  13. 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 (访问日期: ).
  14. Semaphore UI, “Semaphore survey field types”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/web/src/components/SurveyVars.vue (访问日期: ).
  15. Semaphore UI, “Semaphore survey inputs and task launch form”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/web/src/components/TaskForm.vue (访问日期: ).
  16. Semaphore UI, “What is Semaphore UI?”. URL: https://semaphoreui.com/docs/introduction/what-is-semaphore (访问日期: ).
  17. AWX project, “AWX user guide”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/index.html (访问日期: ).
  18. Semaphore UI, “Semaphore source and MIT license”. URL: https://github.com/semaphoreui/semaphore (访问日期: ).
  19. AWX project, “AWX source and Apache 2.0 license”. URL: https://github.com/ansible/awx (访问日期: ).
  20. Semaphore UI, “Semaphore setup and first run”. URL: https://semaphoreui.com/docs/getting-started (访问日期: ).
  21. Semaphore UI, “Semaphore installation methods and dependencies”. URL: https://semaphoreui.com/docs/admin-guide/installation (访问日期: ).
  22. AWX project, “AWX installation paths”. URL: https://github.com/ansible/awx/blob/24.6.1/INSTALL.md (访问日期: ).
  23. AWX project, “AWX Operator installation”. URL: https://docs.ansible.com/projects/awx-operator/en/latest/installation/basic-install.html (访问日期: ).
  24. Semaphore UI, “Semaphore high availability prerequisites”. URL: https://semaphoreui.com/docs/admin-guide/ha#prerequisites (访问日期: ).
  25. AWX project, “AWX web and task replica scaling”. URL: https://docs.ansible.com/projects/awx-operator/en/latest/user-guide/advanced-configuration/scaling-the-web-and-task-pods-independently.html (访问日期: ).
  26. Semaphore UI, “Semaphore automation applications”. URL: https://semaphoreui.com/docs/user-guide/apps (访问日期: ).
  27. Semaphore UI, “Semaphore task templates”. URL: https://semaphoreui.com/docs/user-guide/task-templates (访问日期: ).
  28. AWX project, “AWX job templates and surveys”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/job_templates.html (访问日期: ).
  29. Semaphore UI, “Survey variables”. URL: https://semaphoreui.com/docs/user-guide/task-templates/survey-vars (访问日期: ).
  30. Semaphore UI, “Terraform and OpenTofu in Semaphore”. URL: https://semaphoreui.com/docs/user-guide/apps/terraform (访问日期: ).
  31. Ansible community, “Ansible Terraform module”. URL: https://docs.ansible.com/projects/ansible/latest/collections/community/general/terraform_module.html (访问日期: ).
  32. Semaphore UI, “Semaphore Terraform HTTP backend”. URL: https://semaphoreui.com/docs/user-guide/apps/terraform/states (访问日期: ).
  33. Semaphore UI, “Semaphore workflow nodes and approvals”. URL: https://semaphoreui.com/docs/user-guide/workflows (访问日期: ).
  34. Semaphore UI, “Semaphore inventory types and stored resources”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/db/Inventory.go (访问日期: ).
  35. AWX project, “AWX job slicing”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/job_slices.html (访问日期: ).
  36. Semaphore UI, “Semaphore workflow approval API routes”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/api/router.go (访问日期: ).
  37. AWX project, “AWX resource, workflow approval and activity-stream access control”. URL: https://github.com/ansible/awx/blob/24.6.1/awx/main/access.py (访问日期: ).
  38. AWX project, “AWX workflow approval Ansible module”. URL: https://github.com/ansible/awx/blob/24.6.1/awx_collection/plugins/modules/workflow_approval.py (访问日期: ).
  39. AWX project, “AWX workflow branch convergence”. URL: https://github.com/ansible/awx/blob/24.6.1/awx/main/scheduler/dag_workflow.py#L51-L112 (访问日期: ).
  40. AWX project, “AWX Terraform State inventory source”. URL: https://github.com/ansible/awx/blob/24.6.1/docs/docsite/rst/userguide/inventories.rst#L1092-L1121 (访问日期: ).
  41. AWX project, “AWX instance-group capacity limits”. URL: https://github.com/ansible/awx/blob/24.6.1/docs/docsite/rst/administration/containers_instance_groups.rst#L247-L263 (访问日期: ).
  42. AWX project, “AWX custom credential types”. URL: https://github.com/ansible/awx/blob/24.6.1/docs/credentials/custom_credential_types.md (访问日期: ).
  43. AWX project, “AWX workflows”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/workflow_templates.html (访问日期: ).
  44. AWX project, “AWX workflow branching and output variables”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/workflows.html (访问日期: ).
  45. AWX project, “AWX collection of Ansible workflow variables”. URL: https://github.com/ansible/awx/blob/24.6.1/awx/main/tasks/callback.py#L156-L160 (访问日期: ).
  46. AWX project, “AWX processing of execution-node events”. URL: https://github.com/ansible/awx/blob/24.6.1/awx/main/tasks/receptor.py#L544-L553 (访问日期: ).
  47. AWX project, “AWX inheritance of variables between workflow jobs”. URL: https://github.com/ansible/awx/blob/24.6.1/awx/main/models/workflow.py#L324-L354 (访问日期: ).
  48. Semaphore UI, “Semaphore global runners”. URL: https://semaphoreui.com/docs/admin-guide/runners/ (访问日期: ).
  49. Semaphore UI, “Semaphore project runners”. URL: https://semaphoreui.com/docs/user-guide/projects/runners (访问日期: ).
  50. AWX project, “AWX execution and hop nodes”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/administration/instances.html (访问日期: ).
  51. AWX project, “AWX execution environments”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/execution_environments.html (访问日期: ).
  52. AWX project, “AWX Kubernetes container groups”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/administration/containers_instance_groups.html (访问日期: ).
  53. Semaphore UI, “Semaphore inventories”. URL: https://semaphoreui.com/docs/user-guide/inventory (访问日期: ).
  54. AWX project, “AWX inventories”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/inventories.html (访问日期: ).
  55. Semaphore UI, “Semaphore project access”. URL: https://semaphoreui.com/docs/user-guide/projects (访问日期: ).
  56. Semaphore UI, “Semaphore team roles and template-level permissions”. URL: https://semaphoreui.com/docs/user-guide/team#extended-rbac (访问日期: ).
  57. AWX project, “AWX role-based access controls”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/rbac.html (访问日期: ).
  58. Semaphore UI, “Semaphore LDAP and OIDC authentication”. URL: https://semaphoreui.com/docs/admin-guide/authentication (访问日期: ).
  59. AWX project, “AWX LDAP, OIDC and SAML authentication”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/administration/ent_auth.html (访问日期: ).
  60. Semaphore UI, “Semaphore Key Store”. URL: https://semaphoreui.com/docs/user-guide/key-store (访问日期: ).
  61. AWX project, “AWX credentials and secret lookups”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/credentials.html (访问日期: ).
  62. AWX project, “AWX external secret management integrations”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/credential_plugins.html (访问日期: ).
  63. Semaphore UI, “Semaphore OpenBao secret storage”. URL: https://semaphoreui.com/docs/user-guide/key-store/openbao (访问日期: ).
  64. Semaphore UI, “Semaphore Devolutions Server secret storage”. URL: https://semaphoreui.com/docs/user-guide/key-store/devolutions-server (访问日期: ).
  65. Semaphore UI, “Semaphore webhook integrations”. URL: https://semaphoreui.com/docs/user-guide/integrations (访问日期: ).
  66. AWX project, “AWX webhooks”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/webhooks.html (访问日期: ).
  67. Semaphore UI, “Semaphore REST API”. URL: https://semaphoreui.com/api-docs (访问日期: ).
  68. Ansible community, “Ansible command execution”. URL: https://docs.ansible.com/projects/ansible/latest/collections/ansible/builtin/command_module.html (访问日期: ).
  69. Ansible community, “Ansible PowerShell module”. URL: https://docs.ansible.com/projects/ansible/latest/collections/ansible/windows/win_powershell_module.html (访问日期: ).
  70. Semaphore UI, “Semaphore notification channels”. URL: https://semaphoreui.com/docs/admin-guide/notifications (访问日期: ).
  71. AWX project, “AWX notifications”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/notifications.html (访问日期: ).
  72. Semaphore UI, “Semaphore task history and output”. URL: https://semaphoreui.com/docs/user-guide/tasks (访问日期: ).
  73. Semaphore UI, “Semaphore scheduled tasks”. URL: https://semaphoreui.com/docs/user-guide/schedules (访问日期: ).
  74. AWX project, “AWX activity stream”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/main_menu.html (访问日期: ).
  75. Semaphore UI, “Semaphore Community, Pro and Enterprise”. URL: https://semaphoreui.com/pricing (访问日期: ).
  76. Red Hat, “Red Hat: AWX and Ansible Automation Platform”. URL: https://www.redhat.com/en/technologies/management/ansible/compare-awx-vs-ansible-automation-platform (访问日期: ).
  77. Red Hat, “Red Hat automation controller, formerly Ansible Tower”. URL: https://www.redhat.com/en/technologies/management/ansible/automation-controller (访问日期: ).
  78. Semaphore UI, “Semaphore stable releases”. URL: https://github.com/semaphoreui/semaphore/releases (访问日期: ).
  79. AWX project, “AWX release history”. URL: https://github.com/ansible/awx/releases (访问日期: ).
  80. Semaphore MCP contributors, “Semaphore MCP connector”. URL: https://github.com/cloin/semaphore-mcp (访问日期: ).
  81. Semaphore MCP contributors, “Semaphore MCP task execution and output”. URL: https://github.com/cloin/semaphore-mcp/blob/72f5b7008f6d560c74e01da9884e6fddbbf68999/src/semaphore_mcp/tools/tasks.py (访问日期: ).
  82. LY Corporation, “AWX MCP connector and compatibility”. URL: https://github.com/lycorp-jp/awx-mcp/tree/fa4d25ffa9e04967e98dc66b219a0481d61ea814 (访问日期: ).
  83. LY Corporation, “AWX MCP job template execution”. URL: https://github.com/lycorp-jp/awx-mcp/blob/fa4d25ffa9e04967e98dc66b219a0481d61ea814/awx_mcp/tools/job_templates.py (访问日期: ).
  84. LY Corporation, “AWX MCP job output”. URL: https://github.com/lycorp-jp/awx-mcp/blob/fa4d25ffa9e04967e98dc66b219a0481d61ea814/awx_mcp/tools/jobs.py (访问日期: ).
  85. HashiCorp, “Terraform local state backend”. URL: https://developer.hashicorp.com/terraform/language/backend/local (访问日期: ).
  86. HashiCorp, “Terraform state locking”. URL: https://developer.hashicorp.com/terraform/language/state/locking (访问日期: ).
  87. Semaphore UI, “Semaphore variable groups”. URL: https://semaphoreui.com/docs/user-guide/environment (访问日期: ).
  88. Semaphore UI, “Semaphore runner selection and capacity”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/services/tasks/RemoteJob.go (访问日期: ).
  89. Semaphore UI, “Semaphore cron and one-time schedule execution”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/services/schedules/SchedulePool.go (访问日期: ).
  90. AWX project, “AWX schedules”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/scheduling.html (访问日期: ).
  91. Ansible community, “Ansible constructed inventory plugin”. URL: https://docs.ansible.com/projects/ansible/latest/collections/ansible/builtin/constructed_inventory.html (访问日期: ).
  92. Ansible community, “Ansible cache plugins”. URL: https://docs.ansible.com/projects/ansible/latest/plugins/cache.html (访问日期: ).
  93. Semaphore UI, “View and export the Semaphore audit log”. URL: https://semaphoreui.com/docs/admin-guide/audit-log/view (访问日期: ).
  94. Semaphore UI, “Semaphore administrator audit-log access”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/api/audit_log.go (访问日期: ).
  95. AWX project, “AWX logging and aggregation”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/administration/logging.html (访问日期: ).
  96. Semaphore UI, “Semaphore audit log”. URL: https://semaphoreui.com/docs/admin-guide/audit-log (访问日期: ).
  97. Semaphore UI, “Ansible role and collection installation”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/db_lib/AnsibleApp.go (访问日期: ).
  98. Semaphore UI, “Task-history cleanup”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/db/sql/task.go (访问日期: ).
  99. Semaphore UI, “Ansible inventory overrides”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/services/tasks/TaskRunner.go (访问日期: ).
  100. AWX project, “Projects, Ansible Galaxy and collections”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/userguide/projects.html#ansible-galaxy-support (访问日期: ).
  101. AWX project, “Management jobs”. URL: https://docs.ansible.com/projects/awx/en/24.6.1/administration/management_jobs.html (访问日期: ).
  102. Semaphore UI, “Terraform plan and apply execution”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/db_lib/TerraformApp.go (访问日期: ).
  103. Semaphore UI, “Repository working directories”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/db/Repository.go (访问日期: ).
  104. HashiCorp, “Terraform plan command”. URL: https://developer.hashicorp.com/terraform/cli/commands/plan (访问日期: ).
  105. HashiCorp, “Terraform apply command”. URL: https://developer.hashicorp.com/terraform/cli/commands/apply (访问日期: ).
  106. Semaphore UI, “Security policy”. URL: https://github.com/semaphoreui/semaphore/security/policy (访问日期: ).
  107. AWX project, “Security policy”. URL: https://github.com/ansible/awx/security/policy (访问日期: ).
  108. AWX project, “Release status and project overview”. URL: https://github.com/ansible/awx/blob/devel/README.md (访问日期: ).
  109. Semaphore UI, “Semaphore notification channel implementation”. URL: https://github.com/semaphoreui/semaphore/blob/58a596ed20b724af67c468588edcda12d1779549/services/tasks/alert.go (访问日期: ).

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