この記事ではGitHub ActionsでAnsible PlaybookのCIを実行するサンプルを紹介します。
GitHub Actionsで提供されているVM(Ubuntu)上にDockerコンテナを起動しconnection pluginにDockerを利用します。
説明を簡単にするために必要最低限の実装になっています。必要に応じてlint処理、playbook実行後の設定の確認処理等を追加してください。
ディレクトリ構成
├── .github/workflows/playbook.yml
├── install.yml
└── roles
├── centos7
│ └── tasks
│ └── main.yml
└── requirements.yml
それぞれのファイルの中身
name: Ansible Playbook
on: push
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Docker run Centos7
env:
DOCKER_REGISTRY_URL: https://hub.docker.com/
run: sudo docker run -d -t --name=mycontainer centos:7
- name: Install Ansible galaxy roles
run: ansible-galaxy install -r roles/requirements.yml
- name: ansible
run: ansible-playbook -i 'mycontainer,' -c docker -u root install.yml
- hosts: all
roles:
- role: geerlingguy.repo-epel
tasks:
- name: Install cowsay with yum
include_role:
name: centos7
when: ansible_distribution == "CentOS"
- name: Install cowsay with yum
yum:
name: cowsay
state: present
---
- geerlingguy.repo-epel
解説
「.github/workflows/playbook.yml」がGitHub Actionsの設定ファイルになります。
このファイルの設定だとリポジトリにpushがあるとActionが実行されます。
Ansible Playbookは起動したコンテナに対して実行されます。
Dockerコンテナを起動する時は環境変数からDocker HubのURLを指定します。他のコンテナレジストリサービスを利用する場合はDOCKER_PASSWORD、DOCKER_REGISTRY_URL、DOCKER_USERNAMEをそれぞれ指定します。
その他注意点
AnsibleはGitHub Actionsが提供するVMに既にインストールさています。ただしインストールされている Ansibleのバージョンがリリースとともに上がっていく ため、Ansibleのバージョンを指定して利用したい場合は工夫が必要になります。
またAnsible PlaybookをUbuntuへ実行する場合、Docker Hub上のUbuntuのイメージにはPythonがインストールされていないため事前にPythonをインストールしたUbuntuのイメージを用意する必要があります。
イメージはAction内でdocker buildコマンド等でビルドすることも可能です。