GitHub ActionsでmacOS用のPlaybookをテストする
以前書いた記事の続きです。
前回AnsibleのPlaybookのlintをGitHub Actionsで実施するところまで設定したので実際にPlaybookを実行してテストをさせるようにしました。
使用しているリポジトリはこちらです。
Playbook実行
GitHub Actionsの定義ファイルの/.github/workflows/ansiblelint.yml
をansibletest.yml
にリネームした上で下記を3行追記しました。
- name: Ansible lint + name: Ansible test on: [push] @@ -26,3 +26,6 @@ jobs: run: | ansible-playbook site.yml --syntax-check ansible-lint site.yml + - name: run playbook + run: | + ansible-playbook site.yml
実行させるための設定は以上です。
次にコミットされると自動でansibleインストール, lint, Playbook実行まで行われます。
ちなみに使用しているPlaybookですが実際に1から実行したことがなく、現在使用している端末の設定を少しずつ書き起こしたものだったので最後まで実行しきるまでかなりエラーが出ました。
こちらのP/Rがその四苦八苦した結果です。
パッケージのインストールに時間がかかるのでコメントして省略しようとしたら後続タスクでエラーが出たり、destのパスが見つからなくてlsして探したりと我ながらひどかったです。
Github Actionsのデバッグのコツとかあるんですかね。
テスト実行
Playbook実行後のテストも追加しました。
テスト実装の仕方は色々ありますが、特に深く考えずtestinfraでつらつら書きました。
testinfraについては過去にブログで記事を書いたのでよろしければご覧くださいませ。
各roleごとにtestsディレクトリを作成し、その下にtestファイルを置きました。
例としてzsh設定role用のテストはこのような感じになります。
roleごとのtestを作成したらGitHub Actionsの定義も合わせて修正していきます。
修正内容としてはこちらになります。
- インストールの際にtestinfra, pycodestyleをインストール
- テストコードに対してpycodestyle実行(lint)
- testinfra実行
※ pycodestyleはpythonコードがpep8に準拠しているかのチェックツールです。
そして完成したansibletest.ymlがこちらになります。
/.github/workflows/ansibletest.yml (クリックで展開)
name: Ansible test
on: [push]
jobs:
build:
runs-on: macOS-latest
strategy:
max-parallel: 4
matrix:
python-version: [2.7, 3.7]
ansible-version: [2.7.13, 2.8.5]
steps:
- uses: actions/checkout@v1
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
- name: Install Ansible ${{ matrix.ansible-version }}
run: |
python -m pip install --upgrade pip
pip install pycodestyle testinfra ansible-lint ansible==${{ matrix.ansible-version }}
- name: Lint playbook
run: |
ansible-playbook site.yml --syntax-check
ansible-lint site.yml
- name: run playbook
run: |
ansible-playbook site.yml
- name: run tests
run: |
pycodestyle -v roles
py.test -v roles
pycodestyleもtestinfra(py.test)もディレクトリを引数にするとそのディレクトリ配下から対象のファイルを探してテスト実行してくれるのでrolesディレクトリをまるっと指定しています。
これでコミットごとにAnsibleインストールから実行後のテストまで自動で実施されるようになりました。
直近のコミットでのテストはこんな感じになります。
version up ansible · koh-sh/macbook-playbook@6953381 · GitHub
まとめ
実際にmacセットアップ用のPlaybookに対してここまでがっつりCIでテストする必要はないような気がしますがGitHub Actions楽しいので良しとします。