Рубрики
Uncategorized

Автоматизация и тестирование DotFiles с помощью рабочего процесса Ansible и GitHub

Я запускаю несколько машин Archlinux дома и машиной OSX для работы, поэтому мне нужно сохранить свою систему Co … Tagged с DevOps, ShowDev, GitHub, Archlinux.

Я запускаю несколько машин Archlinux дома и машиной OSX для работы, поэтому мне нужно поддерживать синхронизацию моей системы. У меня есть много приложений, возившихся для моего рабочего процесса — я не хочу менять компьютеры, и мне нужно что -то перенастроить каждый раз, когда я меняю на другой машине. Стоу или Bash Скрипт может позволить нам управлять файлами, но они ограничены, когда конкретная конфигурация, не связанная с подписанием, требует различных настройков для конкретной машины. Например, мой Alacritty Требуется разные настройки для OSX и Linux.

Я Решен Эта проблема, сохранив несколько ветвей для нескольких машин, но это отстой, когда я обновил конфигурацию, и мне нужно было синхронизироваться с моей основной ветвью (Linux). Обработка конфликтов слияния или коммитов с вишней была утомительной. В конце концов, после попытки Стоу В течение многих лет и сценариев Bash я придумал аккуратный рабочий процесс

Chezmoi на помощь

Chezmoi Решен проблемой ветвления, поскольку она позволяет мне обрабатывать несколько конфигураций для разных машин, используя Шаблоны не подписания конфигураций для вставки контекста перед копированием файла. Это решает головные боли с конфликтами слияния и необходимостью поддерживать несколько ветвей. Теперь мне нужна одна филиал для сохранения моих файлов и позволить Chezmoi обрабатывать контекст конфигурации и изменяется при необходимости.

Обработка установки с помощью Ansible

Тем не менее, у меня все еще есть проблема с зависимостью при переустановке моей операционной системы, я почти всегда помню приложения, которые я использую, но не всегда все их нереквидированные зависимости, а также, поскольку я держу несколько OSE, некоторая программа отличается. Сохранение сценария Bash в моих Dotfiles может решить это, но это потребует некоторого времени для поддержания сценария установки для каждой ОС.

Я выбираю Ansible Чтобы справиться с моей установкой зависимостей. Я держу 4 Ansible роли, OSX для всего, что связано с OSX Установка, Archlinux Для архи, связанных с аркой, Linux Для общих команд Linux и общий , разделяется между OSX и Archlinux (Он заботится о клонировании внешних репозитории, применении Chezmoi и т. Д.).

Это позволяет мне легко установить мою конфигурацию на новой машине и обновить любую новую зависимость, которую я добавил в свой инструментарий.

Непрерывная интеграция

Я упоминал ранее, что я больше работаю в OSX из -за своей работы, поэтому я склонен пропускать обновления/удаления пакетов Archlinux, и мне всегда приходится расти свои роли Archlinux с новыми пакетами или конфигурацией, когда они снова меняются, снова, утомительный. Я решил установить свои dotfiles на CI, используя GitHub Workflow . Мой текущий рабочий процесс GitHub выполняет 2 задания, одна для Archlinux (работая на Ubuntu с Docker), а другая с MacOS. Оба запускают Ansible, устанавливают все зависимости, выполняют некоторые проверки системы и, наконец, кэшируют результат.

Это позволяет мне не отставать от обновлений Archlinux/OSX немного быстрее и убедиться, что мой Ansible полностью функционален — если один из CI не удается, что -то произошло с зависимостью или моей конфигурацией.

Спускаясь по яме

С помощью этой структуры DotFile я могу легко написать тестовые сценарии для утверждения, правильно ли копировались файлы, установлены пакеты и т. Д. Например, я мог бы написать скрипт 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 Mode

Я живу в Emacs, этот блог написан в Орг режим и Хьюго Мои фрагменты хранятся в файле орг, а мой код написан в Emacs. Чтобы облегчить свою жизнь, я решил сохранить Command.org Файл с общими командами, которые мне могут понадобиться, когда я возится с моими точками. Орг режим поддерживает грамотное программирование, поэтому сохраняя Command.org Файл позволяет мне выполнять команды в буфере. Я просто C-C C-C В фрагменте и пусть режим org сделает это. Это приятно, когда я возится, например, мне нужно применить изменения с Chezmoi.

Вывод

Конфигурация системы важна для стабильного рабочего процесса, так как мы не хотим сильно меняться при переключении машин, Ansible позволяет нам поддерживать несколько установок в курсе, а Chezmoi позволяет правильно обрабатывать эти конфигурации. Тем не менее, сохраняя ваши Dotfiles в CI звучат, это гарантирует, что ваши установки сценарии полностью функционируют против нескольких OSES, и вы узнаете, когда произойдет что -то плохое.

Benmezger/Dotfiles

Мои дотфилы

Требования

Установите требования к галактике Ansible с ansible -galaxy install -r tement.yml

OSX

Для macOS, запустите ansible -playbook -i инвентарь osx.yml

Linux

Для Linux, запустите ansible -playbook -i инвентаризатор aruelinex.yml

Требования

Установка

Запустить Chezmoi init https://github.com/benmezger/dotfiles.git (См. Ссылка для получения дополнительных вариантов) для проверки репозитория и любых подмодулей. Наконец -то беги Chezmoi Apply Чтобы переместить изменения в ваш домашний каталог.

При установке без ansible, Chezmoi Не установите никаких внешних зависимостей, поэтому убедитесь, что у вас есть все необходимые зависимости перед запуском Chezmoi Apply Анкет

Команды, связанные с этим хранилищем, см. Команды

Оригинал: «https://dev.to/seds/automating-and-testing-dotfiles-with-ansible-and-github-s-workflow-2pp2»