创建用于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