wayofdev.homebrew




构建状态 Ansible 角色 最新版本 Ansible 质量评分 Ansible 角色 软件许可证 自上次发布以来的提交数

Ansible 角色:Homebrew

在 macOS 或 Linux 上安装 Homebrew,并配置源、软件包和 cask。该包使用重试循环处理连接问题。

如果您喜欢或使用此角色,请考虑给它点赞。谢谢!


🗂 目录


📑 要求

  • 最新版本的 Ansible。在维护/开发期间,我们会坚持使用 Ansible 版本,并在可用时使用新功能(并更新 meta/main.yml 以反映最低版本)。
  • 兼容操作系统。请参见兼容性表。
  • 在运行剧本的主机上需要安装 jmespath 库(用于 json_query 过滤器)。
  • 该角色依赖于不同操作系统上的第三方角色。请参见 requirements.yml依赖关系部分。

🔧 角色变量

可用的变量列在下面,并附有示例值(请参见 defaults/main.yml)。其他变量存储在 vars/main.yml 中。


→ 结构

Homebrew 核心的 GitHub 仓库变量。默认为从官方网站的 Homebrew 仓库检查最新版本,如果您将 homebrew_repository 更改为您的分支并希望使用 master 分支并关闭最新版本自动检测,则将 homebrew_repository_use_master 变量设置为 true

# 我们应该从哪个仓库安装 homebrew?
homebrew_repository: https://github.com/Homebrew/brew

# 如果您想使用 master 分支而不是自动检测发行版,请将其设置为 true,或使用在 homebrew_repository 中指定的自定义分支
homebrew_repository_use_master: false

设置为 true 时,将更新 Homebrew 本身并升级所有 Homebrew 包:

# 运行任务以升级所有包
homebrew_upgrade_all: true

变量控制重试次数和每次重试之间的延迟,如果 homebrew install 任务失败:

# 如果安装软件包 / tap / cask 失败,重试多少次?
# 这可能在网络出现问题时发生。
homebrew_retries: 32

# 每次重试之间的延迟。
homebrew_delay: 3

设置为 true 以在安装或更新任何新软件后清除 Homebrew 缓存。

homebrew_clear_cache: false

通过 cask 安装的应用程序应安装的目录。

homebrew_cask_appdir: /Applications

如果设置为 true,则在检查已安装的 cask 是否有更新的版本时,将 --greedy 传递给 brew cask outdated。

homebrew_cask_greedy_mode: false

关闭默认收集的 Homebrew 分析。

homebrew_collect_analytics: false

→ 添加源

添加(tapping)源

homebrew_taps:
  - homebrew/core
  - homebrew/cask-versions
  - homebrew/cask-fonts

添加(tapping)源,更详细地定义 URL 和状态:

homebrew_taps:
  # 仅添加
  - name: homebrew/core

  # 从自定义仓库添加
  - name: denji/nginx
    url: https://github.com/denji/homebrew-nginx

  # 带有定义自定义状态的添加
  - name: homebrew/cask-fonts
    state: present

删除 taps:

homebrew_taps:
  # 定义状态:absent 删除 taps
  - name: homebrew/cask-fonts
    state: absent

  - name: denji/nginx
    state: absent

→ 软件包:安装、更新和删除

简单方式添加软件包:

homebrew_packages:
  - wget
  - curl
  - nano

高级方式添加软件包,定义状态、路径和其他选项:

homebrew_packages:
  # 安装到自定义路径
  - name: wget
    state: present
    path: /opt/custom/path/bin

更新软件包:

homebrew_packages:
  # 首先更新 homebrew,并使用默认路径安装公式 wget
  - name: wget
    state: present
    update_homebrew: true

  # 首先更新 homebrew,并使用默认路径将公式 curl 升级到最新版本
  - name: curl
    state: latest
    update_homebrew: true

删除软件包:

homebrew_packages:
  - name: wget
    state: absent
  - name: curl
    state: absent

→ Cask:安装、更新和删除

:warning: 注意:Cask 仅在 macOS 上支持。请参见 这篇文章

简单方式添加 cask:

homebrew_casks:
  # 安装 cask 列表
  - firefox
  - google-chrome
  - alfred
  - 1password

带有高级选项的添加 cask:

homebrew_casks:
  # 安装 firefox cask
  - name: firefox
    state: present

删除 cask:

homebrew_casks:
  # 定义状态:absent 删除
  - name: firefox
    state: absent
  - name: google-chrome
    state: absent

📗 示例剧本

→ 对于 macOS 机器

---
- hosts: all
  connection: local

  # 在通过 SSH 运行时需要
  environment:
    - PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"

  vars:
    homebrew_taps:
      - homebrew/core
      - homebrew/cask
      - homebrew/cask-fonts
      - yt-dlp/taps
    homebrew_packages:
      - ssh-copy-id  # 来自 homebrew/core
      - yt-dlp  # 来自 yt-dlp/taps
    homebrew_casks:
      - firefox
      - google-chrome
      - font-fira-code-nerd-font  # 来自 homebrew/cask-fonts
    homebrew_retries: 12
    homebrew_delay: 3
    homebrew_clear_cache: false
    homebrew_collect_analytics: false

  roles:
    - elliotweiser.osx-command-line-tools  # 仅限于 macOS 机器
    - wayofdev.homebrew

→ 对于 Linux 机器

---
- hosts: all
  connection: local

  # 在通过 SSH 运行时需要
  environment:
    - PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"

  vars:
    homebrew_user: linuxbrew  # FYI:可以跳过,因为会自动检测,但推荐使用 linuxbrew 用户来安装 Homebrew
    homebrew_group: linuxbrew  # 与 homebrew_user 相同

    homebrew_taps:
      - homebrew/core
      - yt-dlp/taps
    homebrew_packages:
      - ssh-copy-id  # 来自 homebrew/core
      - yt-dlp  # 来自 yt-dlp/taps
    homebrew_retries: 12
    homebrew_delay: 3
    homebrew_clear_cache: false
    homebrew_collect_analytics: false

  roles:
    - geerlingguy.git  # 仅限于 Linux 机器,如果机器上已安装 git,则可以跳过
    - wayofdev.homebrew

⚙️ 开发

要安装依赖项并开始开发,您可以检查我们的 Makefile 内容。

安装 poetry 使用 poetry-bin 和所有开发 Python 依赖项:

$ make install

仅安装 Python 依赖项,假设您已经安装了 poetry:

$ make install-deps

安装所有 git hooks:

$ make hooks

检查所有角色文件的语法:

$ make lint

🧪 测试

您可以查看 Makefile 以获得远程和本地测试的完整命令列表。对于本地测试,您可以使用以下命令测试整个角色或单个任务:

→ 在本地主机上

:warning: 注意:默认情况下,所有测试都在您的本地机器上运行!

# 运行 ./tests/test.yml 中场景的所有标签
$ make test

# 或无任何参数的 test-tag
$ make test-tag

# 运行幂等性检查
$ make test-idempotent

# 运行验证配置文件和执行安装的任务
$ export TASK_TAGS="brew-install,brew-update"
$ make test-tag

# 运行预定义的命令,仅执行一个标签
$ make test-install
$ make test-analytics
$ make test-update
$ make test-taps
$ make test-packages
$ make test-casks

# 在本地主机上运行 molecule 测试
$ poetry run molecule test --scenario-name default-macos-on-localhost -- -vvv

# 或使用 make 命令
$ make m-local

# 使用docker驱动程序运行molecule
$ poetry run molecule test --scenario-name default -- -vvv

# 或使用 make file
$ make m-linux

→ 通过 SSH

# 通过 SSH 在远程机器上运行 molecule 场景
# 这将需要 VM 设置和配置
$ poetry run molecule test --scenario-name default-macos-over-ssh -- -vvv

$ make m-remote

# 也可以传递标签
$ export TASK_TAGS="brew-install,brew-update"
$ make m-remote

📦 依赖关系

安装通过 Makefile 进行,要求在 requirements.yml 中定义。

→ 对于所有

→ 仅限 macOS

→ 仅限 Linux


🧩 兼容性

该角色已在以下系统上测试:

系统 / 容器 标签
macos monterey
macos big-sur
ubuntu jammy
ubuntu focal
debian bullseye
debian buster
fedora 36
fedora 35
centos 8
centos 7

🤝 许可证

许可证


🙆🏼‍♂️ 作者信息

该角色由 lotyp / wayofdev2022 年创建。


🧱 致谢和资源

灵感来源于:


🫡 贡献者


🤑 赞助商

角色开发和测试是在 Parallels Desktop Pro Edition 上完成的,许可证由 Parallels 提供。

关于项目

Ansible role that uses loops and retries to install Homebrew apps and casks.

安装
ansible-galaxy install wayofdev.homebrew
许可证
gpl-3.0
下载
521
拥有者
Making things to build better software