DevOpsCI/CD基础设施【免费下载链接】atlantisTerraform Pull Request Automation项目地址https://gitcode.com/gh_mirrors/at/atlantis点击查看免费下载本指南是 Atlantis 项目Terraform Pull Request Automation的官方入门文档的中文深度解读。你将理解 Atlantis 的核心工作方式——如何通过 GitHub、GitLab、Bitbucket 等平台的 Webhook 自动执行terraform plan并把结果评论回 PR以及为什么它值得在你的基础设施工作流中落地同时你将完整掌握两条上手路径用atlantis testdrive在示例仓库上快速体验以及在本地用 ngrok 针对自己的仓库做真实测试最终顺利迁移到生产部署。一、Atlantis 是什么一个通过 Pull Request 驱动 Terraform 的独立应用Atlantis 是一个用于通过 Pull Request 自动化执行 Terraform的应用程序。它作为独立应用部署在你自己的基础设施中第三方无法接触你的凭据——这一点在部署模型上与其他 SaaS 式方案有本质区别凭据、状态与执行环境始终掌握在你自己手中。它的核心工作流极其简洁可以概括为两条链路自动 PlanAutoplanAtlantis 监听 GitHub、GitLab、Bitbucket 等平台发来的、与 Terraform PR 相关的 Webhook。当 PR 被打开或更新时它自动运行terraform plan并把输出以评论的形式回写到 PR 上。手动 Apply当你准备应用变更时在 PR 上评论atlantis applyAtlantis 便会执行terraform apply同样把完整输出评论回 PR。这一“Webhook 监听 → 执行命令 → 评论回 PR”的闭环在源码层面有非常清晰的落点所有 VCS 平台的 Webhook 统一由 server/controllers/events/events_controller.go 中的VCSEventsController.Post入口接收。它根据请求头如 GitHub 的X-Github-Event、GitLab 的X-Gitlab-Event、Bitbucket 的X-Event-Key、Gitea 的X-Gitea-Event、Azure DevOps 的Request-Id分派到对应的handle*Post方法。对于 PR 打开/更新事件控制器在handlePullRequestEvent中调用CommandRunner.RunAutoplanCommand对于评论命令则在handleCommentEvent中调用CommandRunner.RunCommentCommand。两者默认都在 goroutine 中异步执行先向 VCS 返回Processing...再关闭连接参见 command_runner.go 与 events_controller.go。所以从用户视角看Atlantis 的交互面就是 PR 上的评论与状态无需任何额外的 CLI 或控制台操作。二、为什么要运行 Atlantis四个核心价值原文档给出了四个非常务实的理由下面逐一展开并结合实现细节说明。1. 提升基础设施可见性Increased visibility当每个人都各自在自己电脑上执行 Terraform 时基础设施的“当前真实状态”往往难以回答main分支里部署的到底是什么是否有人忘记为最新变更创建 Pull Request上次terraform apply的输出是什么有了 Atlantis一切都在 PR 上可见plan 输出、apply 输出、命令执行历史都沉淀在 PR 的评论与状态检查中你可以随时查看基础设施上发生过的所有操作记录。2. 让整个工程组织都能参与协作Enable collaboration with everyone你大概率不希望把 Terraform 凭据分发给整个工程组织的每个人——但任何人都可以发起一个 Terraform PR。Atlantis 把“执行能力”收拢到单一服务把“变更意图”开放给全员。同时你可以要求在 apply 之前必须获得审批参见 runatlantis.io/docs/apply-requirements.md从而避免任何意外变更被直接应用。3. 更好地评审 Terraform PRReview Terraform pull requests better不看到terraform plan的输出你几乎无法完整评审一个 Terraform 变更。Atlantis 把这个输出自动附加到 PR评审者可以直接在 PR 评论区看到变更将产生的具体影响而不是要求作者贴截图或手动粘贴输出。4. 标准化工作流Standardize your workflows这是源码证据最充分的一点包含两个关键机制目录/工作区锁Atlantis 会对一个目录/工作区加锁直到该 PR 被合并或锁被手动删除从而保证变更按预期顺序应用避免并发 apply 相互踩踏。锁的键由{repoFullName}/{path}/{workspace}/{projectName}构成核心实现见 server/core/locking/locking.go 的TryLock与数据库层的TryLock锁的查询、列表与删除接口Unlock、List、UnlockByPull在同一文件中有完整定义。当 PR 关闭时PullCleaner.CleanUpPull会自动清理相关锁与工作目录events_controller.go。可配置的执行命令Atlantis 实际执行的每一条命令都是可配置的你可以插入自定义脚本构造理想的工作流。相关工作流定义见 runatlantis.io/docs/repo-level-atlantis-yaml.md 与 runatlantis.io/docs/server-side-repo-config.md。三、快速上手三条路径怎么选原文档给出了清晰的决策树你的目标推荐路径对应文档在示例仓库上快速体验 Atlantis运行atlantis testdriveTest Drive在自己的真实仓库上先本地测试本地运行 ngrok 暴露端口Testing Locally在生产基础设施上正式部署使用 Docker / 云平台部署安装指南需要完整参考手册时请直接访问 www.runatlantis.io/docs。路径一Test Drive —— 五分钟在示例仓库上体验从发布页下载最新的 Atlantis 发行版并解压后直接运行./atlantis testdrive这个模式会在你本机完整搭建一套可交互的体验环境。根据 testdrive/testdrive.go 的引导文案与实现它会自动完成Fork 一个示例 Terraform 项目到你的 GitHub 账号上游仓库为runatlantis/atlantis-example。检测并在必要时安装 Terraform如果它不在$PATH中。安装 ngrok用于把本机 Atlantis 暴露给 GitHub。启动 Atlantis让你可以在该示例 PR 上执行命令。启动过程中你需要交互输入 GitHub 用户名与一个带reposcope 的 Personal Access Token仅用于 fork 示例仓库不会存储。示例 PR 内会内置一份“教学剧本”引导你依次体验atlantis plan、atlantis help、atlantis plan --help、在 http://localhost:4141 查看锁、atlantis apply以及合并 PR 解锁的完整闭环。注意示例仓库未使用远程状态存储合并后状态会丢失——真实使用 Atlantis 时你必须配置远程状态。体验结束后如果一切顺利可以继续阅读 Testing Locally 把它套用到你自己的仓库。四、路径二本地真实测试Testing Locally完整实操如果你希望在自己的仓库上验证 Atlantis再决定是否正式部署请按以下步骤操作。以下内容完整覆盖官方本地测试指南并补充了关键参数说明。第 1 步安装 Terraformterraform必须位于 Atlantis 进程的$PATH中unzip path/to/terraform_*.zip -d /usr/local/bin第 2 步下载 Atlantis获取最新发行版并解压得到atlantis可执行文件。第 3 步下载并启动 NgrokAtlantis 必须能被 github.com / gitlab.com / bitbucket.org或你的 GitHub/GitLab Enterprise 实例访问到。ngrok 会把你的本地端口转发到一个随机公网域名是最便捷的方案./ngrok http 4141记录 ngrok 输出的 hostname并在新终端里稍后启动 Atlantis 的那个设置环境变量URLhttps://{YOUR_HOSTNAME}.ngrok.io第 4 步创建 Webhook SecretGitHub 与 GitLab 使用 Webhook Secret 让客户端校验 Webhook 确实来自它们。生成任意长度的随机字符串并导出SECRET{YOUR_RANDOM_STRING}第 5 步配置各平台 Webhook无论哪个平台Payload URL 都必须是 ngrok 地址 /events例如https://c5004d84.ngrok.io/events这是 Atlantis 接收 Webhook 的固定端点。GitHub / GitHub Enterprise Webhook进入仓库 Settings →Webhooks或 Hooks→Add webhookPayload URLhttps://c5004d84.ngrok.io/events务必以/events结尾Content typeapplication/jsonSecret填入第 4 步的随机字符串选择Let me select individual events勾选Pull request reviews、Pushes、Issue comments、Pull requests保持Active点击Add webhook。GitLab / GitLab Enterprise Webhook进入仓库主页 →Settings WebhooksURLhttps://c5004d84.ngrok.io/events务必以/events结尾Secret Token填入随机字符串勾选Push events、Comments、Merge Request events保持Enable SSL verification勾选点击Add webhook。Bitbucket Cloudbitbucket.orgWebhook仓库主页 →Settings→ 左侧WORKFLOW下的Webhooks→Add webhookTitle填AtlantisURL填 ngrok 地址 /events保持Status为 Active不要勾选 Skip certificate validationngrok 证书有效选择Choose from a full list of triggersRepository 与 Issues 下全部不勾选Pull Request下勾选 Created、Updated、Merged、Declined 和 Comment created保存。Bitbucket Serveraka StashWebhook仓库主页 →Settings→Webhooks→Create webhookName填AtlantisURL填 ngrok 地址 /eventsSecret填随机字符串Pull Request下勾选 Opened、Source branch updated、Merged、Declined、Deleted 和 Comment added保存。Gitea WebhookSettings Webhooks→Add webhook GiteaTarget URLhttp://$URL/eventsSSL 时为https://$URL/events务必以/events结尾Secret填之前生成的 Webhook Secret——注意若为多个仓库添加 Webhook各仓库必须使用相同的 Secret选择Custom Events...勾选Repository events Push、Issue events Issue Comment、Pull Request events Pull Request / Pull Request Comment / Pull Request Reviewed / Pull Request Synchronized保持Active点击Add Webhook。第 6 步为 Atlantis 创建访问 Token推荐的做法是使用专用 CI 用户或新建一个名为atlantis的用户执行所有 API 操作仅测试时可以使用你自己的用户。该 Token 用于让 Atlantis 评论 PR 和设置 commit statusGitHub / GitHub Enterprise创建带reposcope 的 Personal Access TokenGitLab / GitLab Enterprise创建带apiscope 的 Personal Access TokenBitbucket Cloud创建 App PasswordLabel 填atlantis勾选Pull requests: Read 和 WriteBitbucket Server创建 HTTP Access Token命名atlantis赋予ReadProject 权限与WritePull Request 权限Gitea在 Applications Manage Access Tokens 中创建勾选issue: Read and Write与repository: Read and Write。统一导出为环境变量TOKEN{YOUR_TOKEN}第 7 步设置剩余变量并启动 Atlantis再设置两个变量USERNAME{the username of your GitHub, GitLab or Bitbucket user} REPO_ALLOWLIST$YOUR_GIT_HOST/$YOUR_USERNAME/$YOUR_REPO # 示例REPO_ALLOWLISTgithub.com/runatlantis/atlantisBitbucket Server 特别说明$YOUR_GIT_HOST是你的服务器域名不含 scheme 与端口$YOUR_USERNAME是仓库所在的project 名称不是 project 的 key。REPO_ALLOWLIST对应 Atlantis 的仓库白名单机制未在白名单内的仓库发来的事件会被拒绝PR 打开事件会收到 “This repo is not allowlisted for Atlantis” 的评论除非启用了--silence-allowlist-errors实现见 repo_allowlist_checker.go 与 events_controller.go。启动命令因 VCS 平台而异GitHubatlantis server \ --atlantis-url$URL \ --gh-user$USERNAME \ --gh-token$TOKEN \ --gh-webhook-secret$SECRET \ --repo-allowlist$REPO_ALLOWLISTGitHub EnterpriseHOSTNAMEYOUR_GITHUB_ENTERPRISE_HOSTNAME # 示例 github.runatlantis.io atlantis server \ --atlantis-url$URL \ --gh-user$USERNAME \ --gh-token$TOKEN \ --gh-webhook-secret$SECRET \ --gh-hostname$HOSTNAME \ --repo-allowlist$REPO_ALLOWLISTGitLabatlantis server \ --atlantis-url$URL \ --gitlab-user$USERNAME \ --gitlab-token$TOKEN \ --gitlab-webhook-secret$SECRET \ --repo-allowlist$REPO_ALLOWLISTGitLab EnterpriseHOSTNAMEYOUR_GITLAB_ENTERPRISE_HOSTNAME # 示例 gitlab.runatlantis.io atlantis server \ --atlantis-url$URL \ --gitlab-user$USERNAME \ --gitlab-token$TOKEN \ --gitlab-webhook-secret$SECRET \ --gitlab-hostname$HOSTNAME \ --repo-allowlist$REPO_ALLOWLISTBitbucket Cloudbitbucket.orgatlantis server \ --atlantis-url$URL \ --bitbucket-user$USERNAME \ --bitbucket-token$TOKEN \ --repo-allowlist$REPO_ALLOWLISTBitbucket Serveraka StashBASE_URLYOUR_BITBUCKET_SERVER_URL # 示例 http://bitbucket.mycorp:7990 atlantis server \ --atlantis-url$URL \ --bitbucket-user$USERNAME \ --bitbucket-token$TOKEN \ --bitbucket-webhook-secret$SECRET \ --bitbucket-base-url$BASE_URL \ --repo-allowlist$REPO_ALLOWLISTAzure DevOps使用 Basic 认证的 Webhook 时需要证书与私钥atlantis server \ --atlantis-url$URL \ --azuredevops-user$USERNAME \ --azuredevops-token$TOKEN \ --azuredevops-webhook-user$ATLANTIS_AZUREDEVOPS_WEBHOOK_USER \ --azuredevops-webhook-password$ATLANTIS_AZUREDEVOPS_WEBHOOK_PASSWORD \ --repo-allowlist$REPO_ALLOWLIST --ssl-cert-filefile.crt --ssl-key-filefile.keyGiteaatlantis server \ --atlantis-url$URL \ --gitea-user$ATLANTIS_GITEA_USER \ --gitea-token$ATLANTIS_GITEA_TOKEN \ --gitea-webhook-secret$ATLANTIS_GITEA_WEBHOOK_SECRET \ --gitea-base-url$ATLANTIS_GITEA_BASE_URL \ --gitea-page-size$ATLANTIS_GITEA_PAGE_SIZE \ --repo-allowlist$REPO_ALLOWLIST --ssl-cert-filefile.crt --ssl-key-filefile.key第 8 步创建 PR 并验证创建你的第一个测试 PR。作为最小验证可以加一个 null resourceresource null_resource example {}或者只修改某个文件的空白字符。Autoplan自动 planPR 创建后你应该能在 Atlantis 日志中看到收到 Webhook 的记录并在 PR 上看到terraform plan的输出。Atlantis 会根据被修改的文件自动推断要 plan 的目录如果需要自定义目录、处理 workspaces 或.tfvars文件请参考 atlantis.yaml 参考文档。Manual Plan手动 plan在 PR 上评论命令可用-d/-w指定目录或工作区atlantis plan -d mydir atlantis plan -w staging想向底层terraform plan追加额外参数在--之后传入atlantis plan -- -targetresource -var foobar这些命令的实际解析逻辑在 comment_parser.go评论先经strings.Fields初筛再交给shlex做 shell 风格解析可识别的可执行名包括run、atlantis或自定义的ExecutableName以及VCS用户名随后根据命令类型建立对应的 flag 集合plan 的-w/-d/-p/--verboseapply 的-w/-d/-p/--auto-merge-disabled/--auto-merge-method/--verbose等。注意为了安全评论中--之后的 Terraform 额外参数默认会拒绝-chdir、-plugin-dir等可用于绕过安全控制的 flag 前缀见 comment_parser.go 的DefaultBlockedExtraArgs可用--blocked-extra-args覆盖。Apply应用准备应用时评论atlantis apply。可以用-d/-w指向某个特定 plan否则 Atlantis 尝试 apply 根目录的 plan。第 9 步查看实时日志点击 PR 中某个 project 的状态检查即可进入日志流式传输 UIterminal UI实时查看命令执行过程。详见 streaming-logs.md。五、测试完成之后走向生产部署本地验证通过后分别用Ctrl-C停止atlantis server与ngrok准备 生产级部署官方推荐 Docker 方式如果行为不符合预期通常需要用atlantis.yaml定制 Atlantis 的执行方式参见 atlantis.yaml 使用案例更多细节请查阅 完整文档包括服务器配置、仓库级配置、命令审批要求、Webhook 配置与安全加固建议等主题。六、总结Atlantis 的核心心智模型回顾整条入门路径Atlantis 的价值可以用一句话概括把 Terraform 的执行从“个人电脑上的黑盒”变成“PR 上可见、可审批、有锁保护、顺序可控的协作流程”。无论是五分钟的testdrive快速体验还是针对真实仓库的 ngrok 本地测试最终指向的都是同一套生产形态——一个部署在你自有基础设施中的独立服务监听 Webhook、执行 Terraform、评论回 PR全程无人能触碰你的云凭据。赞分享DevOpsCI/CD基础设施【免费下载链接】atlantisTerraform Pull Request Automation项目地址https://gitcode.com/gh_mirrors/at/atlantis点击查看免费下载相关推荐ms-swift 评测实战指南swift eval 三后端架构、训练中期评估与自定义评测集ms swift 评测实战指南swift eval 三后端架构、训练中期评估与自定义评测集 本文基于 ms swift 仓库中的评测文档 EvaluatioDevOpsCI/CD基础设施containerd typeurl 完全指南protobuf Any 类型注册、编组与解编组机制解析containerd typeurl 完全指南protobuf Any 类型注册、编组与解编组机制解析 本指南聚焦 containerd 子项目 typeurDevOpsCI/CD基础设施Atlantis革命性的 Terraform Pull Request 自动化工具Atlantis革命性的 Terraform Pull Request 自动化工具 Atlantis 是一款专为 Terraform 设计的革命性基础设施即代DevOpsCI/CD基础设施上一篇Decoupled-DMD技术重新定义扩散模型蒸馏实现8步极速图像生成下一篇RocksDB 远程压缩恢复机制中的输出目录清理缺陷修复解析OpenAndCompact / allow_resumption创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
