搭建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上设置跳过安装时间较长的内容。

    1. 提供一个名为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 をつくった
广告
将在 10 秒后关闭
bannerAds