_著者はhttps://www.brightfunds.org/organizations/mozilla-foundation[Mozilla Foundation]を選択して、https://do.co/w4do-cta [Write for DOnations]プログラムの一環として寄付を受け取りました。

前書き

Ansibleは、YAMLテンプレートを使用してホストで実行されるタスクのリストを定義するエージェントレス構成管理ツールです。 Ansibleでは、_roles_は、単一の複雑な機能を実行するために一緒に使用される変数、タスク、ファイル、テンプレート、およびモジュールのコレクションです。

Moleculeは、Ansibleロールの自動テストを実行するためのツールであり、一貫して適切に記述され維持されたロールの開発をサポートするように特別に設計されています。 Moleculeのユニットテストにより、開発者は複数の環境に対して異なるパラメーターでロールを同時にテストできます。 開発者は、頻繁に変更されるコードに対してテストを継続的に実行することが重要です。このワークフローにより、コードライブラリを更新してもロールが引き続き機能します。 Travis CIなどの継続的統合ツールを使用してMoleculeを実行すると、テストが継続的に実行され、コードへの貢献によって重大な変更が発生しないことが保証されます。

このチュートリアルでは、UbuntuサーバーとCentOSサーバーにApache Webサーバーとファイアウォールをインストールして構成する、事前に作成されたベースロールを使用します。 次に、そのロールのMoleculeシナリオを初期化してテストを作成し、ロールがターゲット環境で意図したとおりに実行されることを確認します。 Moleculeを構成したら、Travis CIを使用して、新しく作成したロールを継続的にテストします。 コードに変更が加えられるたびに、Travis CIは「+ molecule test」を実行して、役割が引き続き正しく実行されることを確認します。

前提条件

このチュートリアルを始める前に、次のものが必要です。

  • sudo non- rootユーザーとファイアウォール。

  • AnsibleおよびMoleculeが構成されています。これは、https://www.digitalocean.com/community/tutorials/how-to-test-ansible-roles-with-molecule-on-ubuntu-18-04のステップ1に従って実行できます[ Ubuntu 18.04でMoleculeを使用してAnsibleロールをテストする方法]。

  • https://www.digitalocean.com/community/tutorials/how-to-contribute-to-open-source-getting-started-with-gitに従ってインストールしたGit

  • 継続的インテグレーションとその使用事例に精通している。 詳細については、https://www.digitalocean.com/community/tutorials/an-introduction-to-continuous-integration-delivery-and-deployment [継続的な統合、配信、および展開の概要]をご覧ください。

  • GitHubのアカウント。

  • Travis CIのアカウント。

手順1-ベースロールリポジトリのフォーク

Apacheをインストールし、DebianベースおよびRed Hatベースのディストリビューションでファイアウォールを設定するhttps://github.com/do-community/ansible-apache[ansible-apache]という事前に作成されたロールを使用します。 このロールを分岐してベースとして使用し、その上でMoleculeテストをビルドします。 フォークを使用すると、リポジトリのコピーを作成して、元のプロジェクトを変更せずにリポジトリに変更を加えることができます。

  • ansible-apache *ロールのフォークを作成することから始めます。 ansible-apacheリポジトリに移動し、*フォーク*ボタンをクリックします。

リポジトリをフォークすると、GitHubからフォークのページに移動します。 これは基本リポジトリのコピーですが、自分のアカウントにあります。

緑色の[クローンまたはダウンロード]ボタンをクリックすると、[HTTPSでクローン] *のボックスが表示されます。

リポジトリに表示されているURLをコピーします。 次のステップでこれを使用します。 URLは次のようになります。

https://github.com//ansible-apache.git

`++`をGitHubユーザー名に置き換えます。

フォークを設定したら、サーバー上でフォークを複製し、次のセクションでロールの準備を開始します。

ステップ2-役割の準備

前提条件https://www.digitalocean.com/community/tutorials/how-to-test-ansible-roles-with-molecule-on-ubuntu-18-04のステップ1を実行した[分子でAnsibleロールをテストする方法Ubuntu 18.04]では、MoleculeとAnsibleを仮想環境にインストールします。 この仮想環境を使用して、新しい役割を開発します。

まず、以下を実行して、前提条件に従って作成した仮想環境をアクティブにします。

source /bin/activate

次のコマンドを実行して、手順1でコピーしたURLを使用してリポジトリをクローニングします。

git clone https://github.com//ansible-apache.git

出力は次のようになります。

OutputCloning into 'ansible-apache'...
remote: Enumerating objects: 16, done.
remote: Total 16 (delta 0), reused 0 (delta 0), pack-reused 16
Unpacking objects: 100% (16/16), done.

新しく作成したディレクトリに移動します。

cd ansible-apache

ダウンロードした基本役割は、次のタスクを実行します。

  • 変数を含む:役割は、ホストの分布に応じて、必要なすべての_変数_を含めることから始まります。 Ansibleは変数を使用して、異なるシステム間の格差を処理します。 Ubuntu 18.04とCentOS 7をホストとして使用しているため、このロールはOSファミリーがそれぞれDebianとRed Hatであり、 `+ vars / Debian.yml `と ` vars / RedHat.yml +`の変数を含むことを認識します。

  • 配布関連タスクを含む:これらのタスクには、 `+ tasks / install-Debian.yml `および ` tasks / install-RedHat.yml `が含まれます。 指定されたディストリビューションに応じて、関連するパッケージがインストールされます。 Ubuntuの場合、これらのパッケージは ` apache2 `と ` ufw `です。 CentOSの場合、これらのパッケージは ` httpd `と ` firewalld +`です。

  • 最新のindex.htmlが存在することを保証します:このタスクは、ApacheがWebサーバーのホームページとして使用するテンプレート「+ templates / index.html.j2 +」をコピーします。

  • 関連するサービスを開始して起動時に有効にします:最初のタスクの一部としてインストールされた必要なサービスを開始して有効にします。 CentOSの場合、これらのサービスは「+ httpd 」と「 firewalld 」であり、Ubuntuの場合は「 apache2 」と「 ufw +」です。

  • トラフィックを許可するようにファイアウォールを設定します:これには、「+ tasks / configure-Debian-firewall.yml 」または「 tasks / configure-RedHat-firewall.yml 」が含まれます。 AnsibleはFirewalldまたはUFWをファイアウォールとして設定し、 ` http +`サービスをホワイトリストに登録します。

この役割がどのように機能するか理解できたので、Moleculeを構成してテストします。 これらのタスクのテストケースを作成し、それらが行う変更をカバーします。

ステップ3-テストの作成

基本ロールが意図したとおりにタスクを実行することを確認するには、Moleculeシナリオを開始し、ターゲット環境を指定して、3つのカスタムテストファイルを作成します。

次のコマンドを使用して、このロールの分子シナリオを初期化することから始めます。

molecule init scenario -r ansible-apache

次の出力が表示されます。

Output--> Initializing new scenario default...
Initialized scenario in /home//ansible-apache/molecule/default successfully.

Molecule構成ファイルにプラットフォームとして含めることにより、CentOSとUbuntuをターゲット環境として追加します。 これを行うには、テキストエディターを使用して `+ molecule.yml +`ファイルを編集します。

nano molecule/default/molecule.yml

次の強調表示されたコンテンツをMolecule構成に追加します。

〜/ ansible-apache / molecule / default / molecule.yml

---
dependency:
 name: galaxy
driver:
 name: docker
lint:
 name: yamllint
platforms:









provisioner:
 name: ansible
 lint:
   name: ansible-lint
scenario:
 name: default
verifier:
 name: testinfra
 lint:
   name: flake8

ここでは、systemdサービスを使用しているため、特権モードで起動される2つのターゲットプラットフォームを指定しています。

  • `+ centos7 `は最初のプラットフォームであり、 ` milcom / centos7-systemd +`イメージを使用します。

  • `+ ubuntu18 `は2番目のプラットフォームであり、 ` solita / ubuntu-systemd `イメージを使用します。 特権モードを使用し、必要なカーネルモジュールをマウントすることに加えて、起動時に ` / sbin / init +`を実行して、iptablesが稼働していることを確認します。

ファイルを保存して終了します。

特権コンテナの実行の詳細については、https://molecule.readthedocs.io/en/latest/examples.html#systemd-container [公式の分子ドキュメント]をご覧ください。

デフォルトのMoleculeテストファイルを使用する代わりに、ターゲットプラットフォームごとに1つのカスタムテストファイルを作成し、すべてのプラットフォームに共通のテストを作成するために1つのファイルを作成します。 次のコマンドを使用して、シナリオのデフォルトのテストファイル `+ test_default.py +`を削除することから始めます。

rm molecule/default/tests/test_default.py

ターゲットプラットフォームごとに、3つのカスタムテストファイル、 + test_common.py、` + test Debian.py`、および `+ test RedHat.py +`の作成に進むことができます。

最初のテストファイル、 `+ test_common.py `には、各ホストが実行する一般的なテストが含まれます。 共通のテストファイル ` test_common.py +`を作成および編集します。

nano molecule/default/tests/test_common.py

ファイルに次のコードを追加します。

〜/ ansible-apache / molecule / default / tests / test_common.py

import os
import pytest

import testinfra.utils.ansible_runner

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
   os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')


@pytest.mark.parametrize('file, content', [
 ("/var/www/html/index.html", "Managed by Ansible")
])
def test_files(host, file, content):
   file = host.file(file)

   assert file.exists
   assert file.contains(content)

`+ test_common.py `ファイルで、必要なライブラリをインポートしました。 また、 ` test_files()+`というテストを作成しました。これは、ロールが実行するディストリビューション間で唯一の一般的なタスクを保持します。テンプレートをWebサーバーのホームページとしてコピーします。

次のテストファイル `+ test_Debian.py +`は、Debianディストリビューションに固有のテストを保持しています。 このテストファイルは、特にUbuntuプラットフォームを対象としています。

次のコマンドを実行して、Ubuntuテストファイルを作成および編集します。

nano molecule/default/tests/test_Debian.py

これで、必要なライブラリをインポートし、ターゲットホストとして「+ ubuntu18 +」プラットフォームを定義できます。 このファイルの先頭に次のコードを追加します。

〜/ ansible-apache / molecule / default / tests / test_Debian.py

import os
import pytest

import testinfra.utils.ansible_runner

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
   os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('ubuntu18')

次に、同じファイルに、 `+ test_pkg()+`テストを追加します。

`+ test_pkg()+`テストを定義する次のコードをファイルに追加します。

〜/ ansible-apache / molecule / default / tests / test_Debian.py

...
@pytest.mark.parametrize('pkg', [
   'apache2',
   'ufw'
])
def test_pkg(host, pkg):
   package = host.package(pkg)

   assert package.is_installed

このテストは、ホストに `+ apache2 `および ` ufw +`パッケージがインストールされているかどうかを確認します。

次のテスト `+ test_svc()`を定義するには、ファイルの ` test_pkg()+`テストの下に次のコードを追加します。

〜/ ansible-apache / molecule / default / tests / test_Debian.py

...
@pytest.mark.parametrize('svc', [
   'apache2',
   'ufw'
])
def test_svc(host, svc):
   service = host.service(svc)

   assert service.is_running
   assert service.is_enabled

`+ test_svc()`は、 ` apache2 `および ` ufw +`サービスが実行され有効になっているかどうかを確認します。

最後に、最後のテストである `+ test ufw rules()`を ` test Debian.py`ファイルに追加します。

ファイルの `+ test_svc()`テストの下にこのコードを追加して、 ` test_ufw_rules()+`を定義します。

〜/ ansible-apache / molecule / default / tests / test_Debian.py

...
@pytest.mark.parametrize('rule', [
   '-A ufw-user-input -p tcp -m tcp --dport 80 -j ACCEPT'
])
def test_ufw_rules(host, rule):
   cmd = host.run('iptables -t filter -S')

   assert rule in cmd.stdout

`+ test_ufw_rules()+`は、ファイアウォールの設定がApacheサービスによって使用されるポートでのトラフィックを許可することを確認します。

これらの各テストが追加されると、 `+ test_Debian.py +`ファイルは次のようになります。

〜/ ansible-apache / molecule / default / tests / test_Debian.py

import os
import pytest

import testinfra.utils.ansible_runner

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
   os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('ubuntu18')


@pytest.mark.parametrize('pkg', [
   'apache2',
   'ufw'
])
def test_pkg(host, pkg):
   package = host.package(pkg)

   assert package.is_installed


@pytest.mark.parametrize('svc', [
   'apache2',
   'ufw'
])
def test_svc(host, svc):
   service = host.service(svc)

   assert service.is_running
   assert service.is_enabled


@pytest.mark.parametrize('rule', [
   '-A ufw-user-input -p tcp -m tcp --dport 80 -j ACCEPT'
])
def test_ufw_rules(host, rule):
   cmd = host.run('iptables -t filter -S')

   assert rule in cmd.stdout

+ test_Debian.py +`ファイルには、3つのテストが含まれています: `+ test_pkg()++ test_svc()+、および + test_ufw_rules()+

保存して `+ test_Debian.py +`を終了します。

次に、 `+ test_RedHat.py +`テストファイルを作成します。このファイルには、CentOSプラットフォームをターゲットとするRed Hatディストリビューション固有のテストが含まれます。

次のコマンドを実行して、CentOSテストファイル `+ test_RedHat.py +`を作成および編集します。

nano molecule/default/tests/test_RedHat.py

Ubuntuテストファイルと同様に、3つのテストを記述して、 `+ test_RedHat.py `ファイルに含めるようにします。 テストコードを追加する前に、次のコードをファイルの先頭に追加することにより、必要なライブラリをインポートし、 ` centos7 +`プラットフォームをターゲットホストとして定義できます。

〜/ ansible-apache / molecule / default / tests / test_RedHat.py

import os
import pytest

import testinfra.utils.ansible_runner

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
   os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('centos7')

次に、 `+ test_pkg()`テストを追加します。これは、 ` httpd `および ` firewalld +`パッケージがホストにインストールされているかどうかを確認します。

ライブラリインポートのコードに従って、ファイルに `+ test_pkg()+`テストを追加します。 (繰り返しますが、それぞれの新しいテストの前に2つの空白行を含めることを忘れないでください。)

〜/ ansible-apache / molecule / default / tests / test_RedHat.py

...
@pytest.mark.parametrize('pkg', [
   'httpd',
   'firewalld'
])
def test_pkg(host, pkg):
   package = host.package(pkg)

     assert package.is_installed

これで、 `+ test_svc()`テストを追加して、 ` httpd `および ` firewalld +`サービスが実行され有効になっていることを確認できます。

`+ test_pkg()`テストの後に、ファイルに ` test_svc()+`コードを追加します。

〜/ ansible-apache / molecule / default / tests / test_RedHat.py

...
@pytest.mark.parametrize('svc', [
   'httpd',
   'firewalld'
])
 def test_svc(host, svc):
   service = host.service(svc)

   assert service.is_running
   assert service.is_enabled

`+ test_RedHat.py `ファイルの最後のテストは ` test_firewalld()`で、Firewalldに ` http +`サービスホワイトリストが登録されているかどうかを確認します。

ファイルの `+ test_svc()`コードの後に​​ ` test_firewalld()+`テストを追加します。

〜/ ansible-apache / molecule / default / tests / test_RedHat.py

...
@pytest.mark.parametrize('file, content', [
   ("/etc/firewalld/zones/public.xml", "<service name=\"http\"/>")
])
def test_firewalld(host, file, content):
   file = host.file(file)

   assert file.exists
   assert file.contains(content)

ライブラリをインポートして3つのテストを追加すると、 `+ test_RedHat.py +`ファイルは次のようになります。

〜/ ansible-apache / molecule / default / tests / test_RedHat.py

import os
import pytest

import testinfra.utils.ansible_runner

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
   os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('centos7')


@pytest.mark.parametrize('pkg', [
   'httpd',
   'firewalld'
])
def test_pkg(host, pkg):
   package = host.package(pkg)

   assert package.is_installed


@pytest.mark.parametrize('svc', [
   'httpd',
   'firewalld'
])
def test_svc(host, svc):
   service = host.service(svc)

   assert service.is_running
   assert service.is_enabled


@pytest.mark.parametrize('file, content', [
   ("/etc/firewalld/zones/public.xml", "<service name=\"http\"/>")
])
def test_firewalld(host, file, content):
   file = host.file(file)

   assert file.exists
   assert file.contains(content)

+ test_common.py ++ test_Debian.py +、および `+ test_RedHat.py +`の3つのファイルすべてでテストの作成が完了したので、テストの準備ができました。 次のステップでは、Moleculeを使用して、新しく構成されたロールに対してこれらのテストを実行します。

ステップ4-役割に対するテスト

Moleculeを使用して、ベースロール `+ ansible-apache +`に対して新しく作成したテストを実行します。 テストを実行するには、次のコマンドを使用します。

molecule test

Moleculeがすべてのテストの実行を完了すると、次の出力が表示されます。

Output...
--> Scenario: 'default'
--> Action: 'verify'
--> Executing Testinfra tests found in /home//ansible-apache/molecule/default/tests/...
   ============================= test session starts ==============================
   platform linux -- Python 3.6.7, pytest-4.1.1, py-1.7.0, pluggy-0.8.1
   rootdir: /home//ansible-apache/molecule/default, inifile:
   plugins: testinfra-1.16.0
collected 12 items

   tests/test_common.py ..                                                  [ 16%]
   tests/test_RedHat.py .....                                               [ 58%]
   tests/test_Debian.py .....                                               [100%]

   ========================== 12 passed in 80.70 seconds ==========================
Verifier completed successfully.

出力に「+ Verifier completed successfully +」が表示されます。これは、検証者がすべてのテストを実行し、それらを正常に返したことを意味します。

役割の開発が正常に完了したので、Gitに変更をコミットし、継続的なテストのためにTravis CIをセットアップできます。

ステップ5-Gitを使用して更新されたロールを共有する

このチュートリアルでは、これまで、 `+ ansible-apache +`というロールを複製し、UbuntuおよびCentOSホストに対して機能することを確認するためのテストを追加しました。 更新されたロールをパブリックと共有するには、これらの変更をコミットしてフォークにプッシュする必要があります。

次のコマンドを実行してファイルを追加し、行った変更をコミットします。

git add .

このコマンドは、現在のディレクトリで変更したすべてのファイルをステージング領域に追加します。

また、正常にコミットするには、 `+ git config +`で名前とメールアドレスを設定する必要があります。 これを行うには、次のコマンドを使用します。

git config user.email ""
git config user.name ""

変更したファイルをリポジトリにコミットします。

git commit -m "Configured Molecule"

次の出力が表示されます。

Output[master b2d5a5c] Configured Molecule
8 files changed, 155 insertions(+), 1 deletion(-)
create mode 100644 molecule/default/Dockerfile.j2
create mode 100644 molecule/default/INSTALL.rst
create mode 100644 molecule/default/molecule.yml
create mode 100644 molecule/default/playbook.yml
create mode 100644 molecule/default/tests/test_Debian.py
create mode 100644 molecule/default/tests/test_RedHat.py
create mode 100644 molecule/default/tests/test_common.py

これは、変更を正常にコミットしたことを意味します。 次のコマンドを使用して、これらの変更をフォークにプッシュします。

git push -u origin master

GitHub資格情報のプロンプトが表示されます。 これらの資格情報を入力すると、コードがリポジトリにプッシュされ、次の出力が表示されます。

OutputCounting objects: 13, done.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (13/13), 2.32 KiB | 2.32 MiB/s, done.
Total 13 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 2 local objects.
To https://github.com//ansible-apache.git
  009d5d6..e4e6959  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

「+ github.com // ansible-apache 」にあるフォークのリポジトリに移動すると、「 Configured Molecule +」という新しいコミットが表示され、ファイルに加えた変更が反映されます。

これで、Travis CIを新しいリポジトリに統合して、ロールに加えられた変更が自動的にMoleculeテストをトリガーできるようにすることができます。 これにより、ロールが常にUbuntuおよびCentOSホストで機能するようになります。

ステップ6-Travis CIの統合

このステップでは、Travis CIをワークフローに統合します。 有効にすると、フォークにプッシュした変更はTravis CIビルドをトリガーします。 これの目的は、貢献者が変更を加えるたびにTravis CIが常に「分子テスト」を実行するようにすることです。 重大な変更が行われた場合、Travisはビルドステータスを宣言します。

https://travis-ci.org [Travis CI]に進み、リポジトリを有効にします。 GitHubの[アクティブ化]ボタンをクリックできるプロファイルページに移動します。

Travis CIでのリポジトリのアクティブ化に関する詳細なガイダンスhttps://travis-ci.com/getting_started [こちら]をご覧ください。

Travis CIを機能させるには、そのための指示を含む構成ファイルを作成する必要があります。 Travis構成ファイルを作成するには、サーバーに戻って次のコマンドを実行します。

nano .travis.yml

このチュートリアルで作成した環境を複製するには、Travis構成ファイルでパラメーターを指定します。 次のコンテンツをファイルに追加します。

〜/ ansible-apache / .travis.yml

---
language: python
python:
 - "2.7"
 - "3.6"
services:
 - docker
install:
 - pip install molecule docker
script:
 - molecule --version
 - ansible --version
 - molecule test

このファイルで指定したパラメーターは次のとおりです。

  • + language +:Pythonを言語として指定すると、CI環境は、 `+ python `キーで指定したPythonバージョンごとに個別の ` virtualenv +`インスタンスを使用します。

  • + python:ここでは、TravisがPython 2.7とPython 3.6の両方を使用してテストを実行することを指定しています。

  • + services +:Moleculeでテストを実行するにはDockerが必要です。 TravisがCI環境にDockerが存在することを確認する必要があることを指定しています。

  • + install +:ここでは、Travis CIが `+ virtualenv +`で実行する予備インストール手順を指定しています。

  • AnsibleとMoleculeがDockerリモートAPIのPythonライブラリとともに存在することを確認するための「+ pip install molecular docker」。

  • + script +:これは、Travis CIが実行する必要のあるステップを指定するためのものです。 ファイルでは、3つのステップを指定しています。

  • Moleculeが正常にインストールされた場合、 `+ molecule –version +`はMoleculeバージョンを出力します。

  • Ansibleが正常にインストールされた場合、 `+ ansible –version +`はAnsibleバージョンを出力します。

  • `+ molecule test +`は最終的にMoleculeテストを実行します。

`+ molecule –version `と ` ansible –version `を指定する理由は、バージョン管理による ` ansible `または ` molecule +`の設定ミスの結果としてビルドが失敗した場合にエラーをキャッチするためです。

コンテンツをTravis CI構成ファイルに追加したら、保存して `+ .travis.yml +`を終了します。

これで、リポジトリに変更をプッシュするたびに、Travis CIは上記の設定ファイルに基づいて自動的にビルドを実行します。 `+ script +`ブロック内のコマンドのいずれかが失敗すると、Travis CIはビルドステータスを報告します。

ビルドステータスを簡単に確認できるようにするため、ビルドステータスを示すバッジをロールの「+ README 」に追加できます。 テキストエディターを使用して ` README.md`ファイルを開きます。

nano README.md

次の行を `+ README.md +`に追加して、ビルドステータスを表示します。

〜/ ansible-apache / README.md

[![Build Status](https://travis-ci.org//ansible-apache.svg?branch=master)](https://travis-ci.org//ansible-apache)

`++`をGitHubユーザー名に置き換えます。 以前に行ったように、変更をコミットしてリポジトリにプッシュします。

最初に、次のコマンドを実行して、ステージング領域に「+ .travis.yml」および「+ README.md」を追加します。

git add .travis.yml README.md

次を実行して、リポジトリに変更をコミットします。

git commit -m "Configured Travis"

最後に、次のコマンドを使用して、これらの変更をフォークにプッシュします。

git push -u origin master

GitHubリポジトリに移動すると、最初に* build:unknown *が報告されていることがわかります。

画像:https://assets.digitalocean.com/articles/ansible_traivis/step6a.png [build-status-unknown]

数分以内にTravisはビルドを開始し、Travis CI Webサイトで監視できます。 ビルドが成功すると、GitHubはREADMEファイルに配置したバッジを使用して、リポジトリのステータスも報告します。

画像:https://assets.digitalocean.com/articles/ansible_traivis/step6b.png [build-status-passing]

Travis CI Webサイトにアクセスして、ビルドの完全な詳細にアクセスできます。

画像:https://assets.digitalocean.com/articles/ansible_traivis/step6c.png [travis-build-status]

新しい役割にTravis CIを正常に設定したので、Ansibleの役割に対する変更を継続的にテストおよび統合できます。

結論

このチュートリアルでは、GitHubからApache Webサーバーをインストールおよび構成するロールを分岐し、テストを作成してこれらのテストをUbuntuおよびCentOSを実行するDockerコンテナーで構成することにより、Moleculeの統合を追加しました。 新しく作成したロールをGitHubにプッシュすることで、他のユーザーがロールにアクセスできるようになりました。 貢献者によって役割が変更されると、Travis CIは自動的にMoleculeを実行して役割をテストします。

ロールの作成とMoleculeでのテストに慣れたら、これをhttps://galaxy.ansible.com/docs/[Ansible Galaxy]と統合して、ビルドが成功するとロールが自動的にプッシュされるようにすることができます。