我们希望听到您的意见!帮助我们深入了解 Ansible 生态系统的现状。
参与 2024 年 Ansible 项目调查

使用 GitHub Actions 进行 Ansible 代码检查

使用 GitHub Actions 进行 Ansible 代码检查

希望在每次 Pull Request 时都触发 Ansible 部署的代码检查吗?

在本篇博文中,我将向您展示如何在 Ansible 代码管道中添加一些优秀的自动化功能。

CI/CD 目前是开发人员非常关注的一个话题。运维团队可以使用 GitHub Actions 开始一些自动化的代码检查。如果您使用 GitHub,则可以在不同的阶段(包括 Git 推送或 Pull Request)对您的 playbook 进行检查。

如果您遵循良好的 Git 工作流程实践,并且有一个审批委员会来审查 Pull Request,这种类型的自动化测试可以为您节省大量时间,并保持您的 Ansible 代码整洁。

什么是 Ansible Lint?

Ansible Lint 是一个开源项目,用于检查您的 Ansible 代码。 文档 指出它会检查 playbook 中可能需要改进的实践和行为。它可以使用 pip 安装,并手动在 playbook 上运行,或者在 pre-commit hook 中设置,并在您尝试从 CLI 提交到仓库时运行。

该项目可以在 GitHub 上的 Ansible 组织下找到。

什么是 GitHub Actions?

来自 GitHub 的 文档:GitHub Actions 使您能够创建自定义工作流来自动化项目的软件开发生命周期流程。工作流是由一个或多个作业组成的可配置自动化流程。您必须创建一个 YAML 文件来定义您的工作流配置。您可以配置您的工作流,以便在 GitHub 上发生特定活动时、在计划时间或在 GitHub 外部发生事件时运行。

可以在 GitHub 的 Actions 市场中找到 Ansible Lint action。

示例仓库

让我向您展示一个示例,说明这将是什么样子。这里我有一个包含 Ansible Playbook 的仓库。

https://github.com/colin-mccarthy/ansible_lint_demo

我尝试提交一个 Pull Request 来添加一个新的 playbook。Ansible Lint Action 启动并最终检测到一个问题并返回失败消息。

为什么失败了?

我可以在仓库的 Actions 部分查看构建日志。看起来我在其中一个任务中有一些尾随空格,并且正在与空字符串进行比较。

image one

我会收到电子邮件通知吗?

我也收到了电子邮件通知,告知我它失败了。

image two

设置

要使用该 action,只需在 .github/workflows/ 目录中创建一个 Ansible Lint.yml(或选择自定义的 *.yml 名称)。

image three

所以这里是最酷的部分,您可以在各种事件上运行该 action!这意味着每次有人提交 PR 或进行推送时,都会触发该 action,并且会启动一个容器并在您的仓库上运行 Ansible lint。您可以使用 on: parameter 定义哪些事件将触发该 action。

on: [push, pull_request]

Pre-commit hook

我想通过介绍 pre-commit hook 来更深入地了解代码检查。

Pre-commit hook 是在您的机器上本地运行的小脚本,可以帮助在提交代码审查之前识别问题。在谈论 Ansible Lint action 时,在您提交 Pull Request 之前检查代码会非常有用。这将确保您始终通过检查。GitHub action 将仅仅作为保护共享仓库的最后一步。如果您使用 pre-commit hook,则理论上永远不会使 GitHub action 测试失败。

示例

image four

https://pre-commit.git.js.cn

要在我的 MacBook 上设置它,我只需执行 pip install。

pip install pre-commit

要在您的仓库上设置它,请确保您…

pre-commit install

要将 Ansible Lint 与 pre-commit 一起使用,只需将以下内容添加到您本地仓库的 .pre-commit-config.yaml 文件中。确保将 rev: 更改为 Ansible Lint 的 Git 提交 SHA 或标签,其中包含 hooks.yaml

image five

Markdown 徽章

设置 action 后,GitHub 将为您提供一段 Markdown 代码片段,您可以将其添加到 README.md 中,以显示仓库的代码检查状态。一个用于您的仓库的徽章,以显示它是否通过了代码检查测试。

image six

删除尾随空格并修复所有问题后,我的 PR 显示“所有检查都已通过”,并且我的徽章显示已通过。

image seven

image eight

总结

在代码更改上强制执行代码检查可以建立对您的代码遵循最佳实践的信任。希望您可以尝试使用 GitHub Actions 或 pre-commit hook 为您的 Ansible 仓库添加一些代码检查。设置此 action 非常有趣,我尤其喜欢提供的徽章。