8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AnsibleAdvent Calendar 2021

Day 2

Moleculeテスト環境用のDockerゴールデンイメージを作成する

Last updated at Posted at 2021-12-01

Ansible Moleculeでテストを実行する時にテスト対象になるDockerイメージの作成方法について解説します。

今回はGitHub Actionsを用いてGitHubコンテナレジストリへDockerイメージを登録するまでになります。

なぜテスト環境用のDockerイメージを作成、登録するのか?

  • CIの実行時間を短縮するため
  • コードの記述量を減らしメンテナンスしやすくする

これらの理由が考えられます。

CIの実行時間を短くする

Moleculeの機能から言えばMolecule実行時にDockerfileからテスト環境用のコンテナを作成する事は可能です。しかし毎回イメージをビルド、コンテナを起動しているとCIの実行時間が長くなってしまいます。

コードの記述量を減らしメンテナンスしやすくする

テスト環境用のDockerfileを一箇所で管理する事によりメンテナンスコストが減らせます。例えばAnsible Role / Playbookでリポジトリがそれぞれ分かれていてなおかつそれぞれのリポジトリでDcokerfileが管理されている場合Dockerfileに変更が生じると全てのリポジトリに対して修正を行う必要が出てきます。これは相当悪手なので絶対に避けます。

ゴールデンイメージの仕様

ゴールデンイメージの設計図となるDockerfileには以下を含めます

  • イメージのアップデート処理
  • Ansibleを実行するユーザーの作成
  • Ansible実行ユーザーへroot権限の付与

sshdはインストールしない?

Ansibleは標準でDockerコンテナへの実行をサポートしています。そのためsshdはインストールしません。

イメージのビルドの頻度は?

毎日が理想だと思います。減るものでもないのでcron等で自動化しておくと良いでしょう。

Dockerfileのサンプル例

Dockerfile
FROM centos:8

# Install requirements
RUN dnf clean all \
  && dnf update -y \
  && dnf install -y sudo

# Create `ansible` user with sudo permissions
ENV ANSIBLE_USER=ansible SUDO_GROUP=wheel
RUN set -xe \
  && groupadd -r ${ANSIBLE_USER} \
  && useradd -m -g ${ANSIBLE_USER} ${ANSIBLE_USER} \
  && usermod -aG ${SUDO_GROUP} ${ANSIBLE_USER} \
  && sed -i "/^%${SUDO_GROUP}/s/ALL\$/NOPASSWD:ALL/g" /etc/sudoers

GitHub Actoinsのサンプルファイル

.github/workflows/build.yml
---
name: build
on: [deployment, push]

jobs:
  github-container-registory:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        base-image: [centos7, centos7jp, centos8]
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to GitHub container resigtory
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.CR_PAT}}

      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          file: ${{ matrix.base-image }}/Dockerfile
          push: true
          tags: ghcr.io/org/repo/${{ matrix.base-image }}:latest

参考サイト

今回の記事のサンプルになるGitHubリポジトリ

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?