创建用于Molecule测试环境的Docker黄金镜像

以下是关于在使用Ansible Molecule执行测试时创建Docker镜像作为测试对象的方法的说明。

这次我们将使用GitHub Actions将Docker镜像注册到GitHub容器注册表。

为什么要创建和注册测试环境用的Docker镜像?

    • CIの実行時間を短縮するため

 

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

可以考虑以下几个原因。

缩短CI的执行时间

从Molecule的功能来看,在运行Molecule时可以从Dockerfile创建用于测试环境的容器。然而,如果每次都要构建镜像并启动容器,CI的执行时间会变得很长。

简化代码长度,便于维护。

通过在一个地方管理测试环境的Dockerfile,可以减少维护成本。例如,如果使用Ansible Role / Playbook将仓库分开,并且每个仓库都有自己的Dockerfile管理,当Dockerfile发生更改时,就需要对所有仓库进行修正。这是一个非常不明智的做法,应该绝对避免。

黄金镜像的规格

把以下内容包含在成为Golden Image蓝图的Dockerfile里。

    • イメージのアップデート処理

 

    • Ansibleを実行するユーザーの作成

 

    Ansible実行ユーザーへroot権限の付与

你不安装sshd吗? (Nǐ bù sshd ma?)

Ansible默认支持对Docker容器的执行操作,因此不安装sshd。

    How to build your inventory — Ansible Documentation

建立映像的频率是多少?

我认为每天都是理想的。既然没有什么需要减少的,所以最好使用cron等工具进行自动化。

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 Actions的示例文件

---
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 Docs

这个GitHub仓库将成为本篇文章的样例。

    docker-images-mamono210/ansible-test_centos at 225a8dab63650ce42cc11ec50fb4d8e43ebf43f4
广告
将在 10 秒后关闭
bannerAds