Я запускаю несколько машин 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
Анкет
Команды, связанные с этим хранилищем, см. Команды
- Шрифты
- Zsh
- Эмац
- Системные утилиты
- OSX
- Linux
Оригинал: «https://dev.to/seds/automating-and-testing-dotfiles-with-ansible-and-github-s-workflow-2pp2»