搭建Mac开发环境(Ansible + Serverspec + Travis CI)
概要的意思是简要概括或总结一份文件、文章或计划的要点。
我尝试使用Ansible自动化Mac开发环境的配置,并将所做和研究的事情记录下来。
我想要用ansible做一个像Boxen一样的东西,这就是我的开始。因此,我准备了一个类似于our-boxen(模板)的东西,并复制它并自定义成适用于自己的专用存储库。
https://github.com/tell-k/blister-pack …. 基本的なセットアップ内容
https://github.com/tell-k/blister-pack-mine … 自分個人のセットアップ内容
请参考README.rst文件以了解使用blister-pack的方法。
我做了以下的事情。
-
- Mac OSX の開発環境構築をansibleで自動化する。主にhombrew + homebrew-caskで必要なパッケージをインストール
-
- Boxenのように、共通部分、個人、プロジェクトに分けて構築内容(role)を管理する。
-
- Serverspecでテストする。
- Travis CIでビルド/テストを実行する
使用Ansible进行环境的构建
-
- 主にansibleのhombrewモジュールとhombrew-caskモジュールで大概のものはインストールできた。
- ansibleのローカル環境への実行はinventryファイルに以下のように書けば良い。
[localhost]
127.0.0.1
[localhost:vars]
ansible_connection=local
对于Role的管理
- Boxenのように共通分/個人/プロジェクト毎に、構築内容を分けて管理するようにした。
├── Makefile
├── README.rst
├── Rakefile
├── callback_plugins
├── hosts
├── playbook.yml
├── roles
│ ├── common # <- 共通で使うrole群
│ ├── people # <- 個人毎のrole群
│ └── projects # <- プロジェクト毎のrole群
└── spec
├── common
├── people
├── projects
└── spec_helper.rb
用以下的自然中文重新表达,只需要一种选项:
使用Serverspec进行测试。
-
- ServerspecでAnsibleでの構築内容をテストできるようにした。
envassertとansibleのassertモジュールを使うという選択肢もある。
specファイルもcommon/people/projectsで分けるようにした。
Serverspecはやりたい事が大概ドキュメントに書いてあるので便利
在 Travis CI 上进行构建和测试
-
- Travis CI はビルド環境としてOS X環境を提供してくれる
それを使ってビルド/テストをする
OS Xを利用する場合は.travis.ymlで明示するだけ
homebrew、xcodeなどは事前に入ってるらしい
sudoはパスワード無しで実行できるらしいので、ansibleの「-K」オプションを抜かして実行している
language: objective-c
os:
- osx
before_install:
- brew update
- brew install python
- brew install ansible
- ansible-playbook -vv playbook.yml -i hosts
script:
- make test
技巧
自制软件的更新/升级
-
- homebrewのupdateはFormulaやhomebrew自身をアップデートする。
-
- upgradeは対象パッケージを再ビルド/インストールする。
-
- ansibleのhomebrewモジュールには「update_homebrew」「upgrade_all」というオプションがある。
- このオプションを適宜変更できるようにinventoryに変数をもたせた。
[localhost]
127.0.0.1
[localhost:vars]
homebrew_update=yes # 常にupdateするためyes。遅いと感じるならnoにする
homebrew_upgrade_all=no # 全パッケージの更新が必要になったらyesにする
我直接将Homebrew模块添加到路径中。
- name: Update homebrew
homebrew: update_homebrew={{ homebrew_update }} upgrade_all={{ homebrew_upgrade_all }}
引用环境变量和路径的参考
-
- homebrewなどは「hombrew –prefix」「homebrew –cellar」などでパスを取得できる
-
- これをansibleやserverspecにどうやって渡すか。
-
- Ansibleの場合 lookup プラグインで、環境変数や、シェルの実行結果などを、参照できる。
- それを利用してinventoryファイルに定義すると、playbookの中で参照可能
[localhost]
127.0.0.1
[localhost:vars]
home_path={{ lookup('env','HOME') }}
homebrew_prefix={{ lookup('pipe','echo `brew --prefix`') }}
homebrew_cellar={{ lookup('pipe','echo `brew --cellar`') }}
在role中以如下方式使用这个
- name: Copy dnsmaq.conf
copy: src=roles/common/dnsmasq/files/dnsmasq.conf dest="{{ homebrew_prefix }}/etc/dnsmasq.conf" backup=yes
对于Serverspec来说,只需在spec_helper.rb中定义即可,无需考虑其他。
require 'serverspec'
set :backend, :exec
def home_path
home_path = `echo ~/`
home_path.chomp
end
def homebrew_prefix
prefix = `brew --prefix`
prefix.chomp
end
def homebrew_cellar
cellar_path = `brew --cellar`
cellar_path.chomp
end
使用Ansible的回调插件进行完成通知
-
- Ansibleを実行すると時間がかかるので、終わったら通知するようにした。
- AnsibleのCallbacksプラグインを使って、OS Xの通知センターに表示されるようにした。
- スクリプトはここ
对于Travis的构建时间限制,如何应对
在以下情况下,Travis会强制停止构建。
-
- 50分以上ビルドにかかると強制終了される
-
- 一定時間標準出力がなくても強制終了される。
- http://docs.travis-ci.com/user/build-configuration/#Job-Timeouts
首先,我们在Travis上设置跳过安装时间较长的内容。
-
- 提供一个名为TRAVIS_BUILD_SKIP的环境变量
- 在role/spec中,检查此环境变量并选择不执行。
- 本末転倒感がすごいのでより良い方法を探す。
对于类似于lint的检查,只需要一种选项。
-
- Ansibleは標準で–syntax-checkをしてくれるオプションがある
-
- ansible-lintというライブラリもある。-> tarvisでエラーが出た+大したチェックをしてくれないので今は使用してない
-
- serverspecの方は、rubocopを利用している。「–auto-correct」オプションである程度、自動で整形してくれるの良い。
- Makefileにcheckstyleと定義してチェックできるようにした
个人私密建设内容的管理
-
- 例えばプライベートなプロジェクトのrole/spec群はそれぞれ「private」というディレクトリ以下において、gitignore設定している。
- プライベート用のYAML(private.yml)を用意して、毎回ansible実行時に、playbook.ymlとprivate.ymlをマージしてる。
处理github仓库
-
- Travis CI上でansibleのgitモジュールを使ってSSH経由でgithubのリポジトリをcloneするためには秘密鍵が必要
- その場合、デプロイキーを各リポジトリに設置するか、もしくはHTTPSでcloneするようにする必要がある。面倒なのでだいたいHTTPSにしている。
例: gitモジュールのrepoをhttpsで始まるURLにしている。
- name: Git clone tell-k/sphinxjp.themes.basicstrap
git: repo=https://github.com/tell-k/sphinxjp.themes.basicstrap.git dest=~/Work/python/sphinxjp.themes.basicstrap update=no
額外談一談
-
- Travis CI以外は半年くらい同じ構成で試したけど、大きな問題は特になかった。Ansible素晴らしい。
-
- Serverspec + Travisでのチェックが割と安心感ある。Serverspecでテスト書くのはなんか楽しい。
-
- ライセンスの関係でApp Store経由で購入しているものもあるので、完全自動化は難しそう。
-
- 個人/プロジェクト毎みたいな話を書いたけど、ボッチなので自分以外の他に人と共有したり、使ってもらったりした事はない。
- blister-packていう珍妙な名はBoxenのTOP絵を見てつけた。
取而代之
除了使用Ansible进行Mac OS X环境配置的想法/工具之外,还有其他一些选项。
-
- geerlingguy/mac-dev-playbook
-
- osxc
- battleschool
起初我试图利用这些工具,但因以下原因而放弃了。
-
- Ansible以外のツール固有の何かを覚えるのが面倒そうだった。
-
- Boxenのようにラッパーコマンドがあったりするが、Ansibleのプラグイン機構で代用が効きそうだった。
- 単純にショートカットとしてのラッパーだったら、Makefileで十分だった。
请提供以下内容的中文释义,只需提供一种选择:
– Reference
图书
入門Ansible … Ansibleで何ができるのかよく分かる本
Pythonプロフェッショナルプログラミング第2版 … Ansibleの章があります(ステマ)
Pythonエンジニア養成読本 … 入門Ansibleの中の人がAnsibleについて書いてるので、買って読む予定。
Serverspec … まだ買ってないので買わなあかん > 俺
安装网络配置管理工具Ansible相关组件。
-
- All Modules — Ansible Documentation
-
- Mac の開発環境構築を自動化する (2015 年初旬編)
-
- geerlingguy/mac-dev-playbook
-
- ansibleコトハジメ
-
- ansible虎の巻
-
- 構成管理ツール Ansibleについて
-
- Ansible入門…?という発表をしました
-
- ansibleのログをfluentdに流す
-
- Ansible 1.5 リリース
-
- Ansibleのroleを使いこなす
-
- Ansibleで自作モジュールを作成してplaybookと一緒に配布
-
- Ansible チュートリアル
- Ansibleをローカルで使ってみた
盒子相关
-
- Boxen使わなくても許されるのは2012年までだよね
-
- Boxenを実行すると何が起こるのか
-
- boxenでの構築でハマった所メモ
-
- boxenを導入した話
-
- Boxenを利用したMacのセットアップ
-
- もうすぐ 2014 年だけど boxen を独りで使ってみる
- Boxenを利用したMacのセットアップ
Homebrew-cask相关
-
- BoxenやめてBrewfile+homebrew-caskにした
-
- brew cask でインスコできるリスト
-
- Mac OSX をクリーンインストールしてからの環境構築メモ
-
- homebrew-cask でインストールしたアプリを Alfred から呼び出せない
-
- MacBook にインストールしているアプリやツールをメモする代わりに Brewfile を作った
-
- Homebrew vs Boxen を比較して、brewproj に着手
- Boxenとbrew Bundle && Homebrew-caskを比較した感想
服务器规范相关
-
- Serverspec – Resource Types
-
- serverspec のテストをホスト間で共有する方法
- 構築済みサーバを RSpec でテストする serverspec という gem をつくった