使用 Ansible 和 Github 的工作流程自动化和测试点文件

发布时间:2024-11-27 19:15

了解软件工程流程,如敏捷开发和测试驱动开发。 #生活技巧# #工作学习技巧# #编程学习路径#

我在家里运行多台 Archlinux 机器和一台 OSX 机器来工作,所以我需要保持我的系统配置同步。我有很多应用程序针对我的工作流程进行了修改——我不想切换计算机并且每次在另一台机器上进行更改时都必须重新配置一些东西。stow或bash脚本可以让我们管理文件,但是当特定的非脚本配置需要特定机器的不同设置时,它们会受到限制。

例如,我的Alacritty需要针对 OSX 和 Linux 进行不同的设置。

我通过为多台机器保留多个分支解决了这个问题,但是当我更新配置并且我需要与我的主分支(Linux)同步时,这很糟糕。处理合并冲突或挑选提交是很累人的。最终,在多年尝试stow和 bash 脚本之后,我想出了一个简洁的工作流程

Chezmoi解决了分支问题,因为它允许我处理不同机器的多个配置,方法是使用非脚本配置的模板在复制文件之前插入上下文。这解决了合并冲突和必须维护多个分支的问题。我现在需要一个分支来保存我的文件,并让 Chezmoi 处理配置上下文并在需要时进行更改。

然而,我在重新安装操作系统时仍然存在依赖问题,我几乎总是记得我使用的应用程序,但并不总是记住它们所有非必需的依赖关系,而且,由于我保持多个操作系统,一些程序会有所不同。在我的点文件中保留一个 bash 脚本可以解决这个问题,但这需要一些时间来维护每个操作系统的安装脚本。

我选择Ansible来处理我的依赖安装。我保留了 4 个 Ansible 角色,osx用于与osx安装相关的任何内容,archlinux用于与拱相关的东西,linux用于常见 Linux 命令和common,在osx和archlinux之间共享(它负责克隆外部存储库,应用 Chezmoi 等)。

这使我可以轻松地将我的配置安装在新机器上,并更新我添加到工具包中的任何新依赖项。

我之前提到,由于我的工作,我在 OSX 上工作得更多,所以我往往会错过 Archlinux 包更新/删除,当我再次更改新包或配置时,我总是不得不用新的包或配置修补我的 Archlinux Ansible 角色,累。我决定使用Github Workflow在 CI 上安装我的点文件。

我当前的 Github 工作流程运行 2 个作业,一个用于 Archlinux(在 Ubuntu 上运行 Docker),另一个用于 MacOS。两者都运行 Ansible,安装所有依赖项,进行一些系统检查,最后缓存结果。

这使我能够更快地跟上 Archlinux/OSX 更新,并确保我的 Ansible 功能齐全——如果其中一个 CI 失败,则依赖项或我的配置发生了问题。

有了这个点文件结构,我可以很容易地编写测试脚本来断言文件是否被正确复制、包是否安装等等。例如,我可以编写一个 Python 脚本来断言文件是否正确就位,然后我可以设置这个脚本来运行在 Ansible 完成它的工作之后。

import pathlib import os import platform HOME = pathlib.Path(os.getenv("HOME", ".")).absolute() def osx_verify_copied_files(home: str = HOME, required=(".zshrc", ".zshenv")): for f in required: print(f"Checking if {HOME.joinpath(f)} exists") assert HOME.joinpath(f).exists() == True, "{f} does not exist" def osx_verify_hostname(hostname): print(f"Verifying if hostname '{hostname}' is set") assert platform.node() == hostname, "Hostname does not match" osx_verify_copied_files() osx_verify_hostname("benmezger-ckl.local")

Checking if /Users/benmezger/.zshrc exists Checking if /Users/benmezger/.zshenv exists Verifying if hostname 'benmezger-ckl.local' is set

我住在 Emacs,这个博客是用Org 模式和Hugo编写的,我的代码片段存储在一个 org 文件中,我的代码是用 Emacs 编写的。为了让我的生活更轻松,我决定保留一个COMMAND.org文件,其中包含我在修改我的点文件时可能需要的一般命令。 Org 模式支持识字编程,因此保留COMMAND.org文件允许我在缓冲区中执行命令。我只是在片段中添加了C-c C-c并让 org 模式实现它。例如,当我修改我的 dotfiles 并且我需要使用 Chezmoi 应用更改时,这很好。

系统配置对于稳定的工作流程很重要,因为我们不想在切换机器时进行太多更改,Ansible 允许我们保持多个安装最新,而 Chezmoi 允许正确处理这些配置文件。将您的点文件保存在 CI 中听起来势不可挡,但是,它确实可以保证您的安装脚本在多个操作系统上都可以完全正常运行,并且您会知道什么时候发生了不好的事情。

Ansible

使用ansible-galaxy install -r requirements.yml安装 Ansible Galaxy 要求

对于 MacOS,运行ansible-playbook -i inventory osx.yml

对于 Linux,运行ansible-playbook -i inventory archlinux.yml

主页

运行chezmoi init https://github.com/benmezger/dotfiles.git(有关更多选项,请参阅参考)以检出存储库和任何子模块。最后,运行chezmoi apply将更改移动到您的主目录。

在没有 Ansible 的情况下安装时,chezmoi不会安装任何外部依赖项,因此请确保在运行chezmoi apply之前拥有所有必需的依赖项。

有关与此存储库相关的命令,请参阅COMMANDS

字体

*Inconsolata-DZ

*破解

ZSh

*抗体

*FZF

Emacs

*厄运 Emacs

系统实用程序

*Wakatime

*Emacs

*主页

*Ripgrep

*彭夫

*雨果

OSX

*自制

*马斯

Linux

100,144 浮点数 100,145 100,143

*Aura (Archlinux)

在 GitHub 上查看

网址:使用 Ansible 和 Github 的工作流程自动化和测试点文件 https://www.yuejiaxmz.com/news/view/291574

相关内容

深入理解CI/CD:构建、测试和部署的完整流程
【补充】Python的自动化工具Ansible
使用WebHooks实现自动化工作流程的技术详解
自动化工具篇:Top 10 自动化工具和软件
带你了解Linux自动化运维工具——ansible
自动化运维工具
自动化运维:使用Ansible简化日常任务
Ansible: 简单而强大的IT自动化工具
软件测试工具:11类41款主流测试工具盘点
事件、流程和长期运行的服务:工作流自动化的现代解决方案

随便看看