Рубрики
Uncategorized

Тест Докерского подразделения: Как проверить DockerFile (руководство 2020)

Вы знаете, что вы должны проверить все … Не так ли? Ну, пишетный тест подразделения для докера должен быть частью … Tagged с Docker, DEVOPS, учебником, кодовым механизмом.

Вы знаете, что вы должны Проверьте все

Не так ли?

Что ж, писать модульный тест на Docker должен быть частью вашей ежедневной рутины при разработке нового DockerFile. Он может сэкономить вас закручивать время, проведенное запуск докера, пытаясь выяснить, почему не работает, и он резко уменьшит ваш страх восстановления и обновления контейнера (если вы все еще не верьте мне на тестирование, прочитайте эту статью Джеймс Шор ).

В этом руководстве вы узнаете: Какие инструменты могут помочь вам тестировать свой DockerFile, как написать тест подразделения для Docker и как автоматизировать его в непрерывной интеграционной трубопроводке.

Докерная контейнерная структура

Лучший инструмент, который я могу raccomand написать тест подразделения для Docker — это Тест структуры контейнера фреймворк. Эта рамка, разработанная Google, делает Super легко проверить структуру вашего изображения контейнера.

Как установить

Если вы используете Linux Run:

curl -LO https://storage.googleapis.com/container-structure-test/latest/container-structure-test-linux-amd64 && chmod +x container-structure-test-linux-amd64 && sudo mv container-structure-test-linux-amd64 /usr/local/bin/container-structure-test

Варианты теста

Тест на конструкцию контейнеров предлагает 4 типа теста:

  • Командные тесты : Выполните команду на своем изображении и проверьте вывод
  • Испытания существования файлов : Проверьте, есть ли файл или нет, присутствует на изображении
  • Тесты содержимого файла : Проверьте содержимое файла
  • Тест метаданных : Проверьте, правильно ли метаданные контейнера

Как написать тест докера

Все, что вам нужно, это Dockerfile и .yaml или .json Файл, который содержит ваши тестовые случаи.

Напишите свой первый тест докера

Для этого примера мы будем использовать следующие Dockerfile для изображения, который можно использовать в CI для создания кода, используя Базель Отказ

FROM ubuntu:bionic

RUN apt-get update \
  && apt-get install -y curl gnupg \
  && curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg \
  && mv bazel.gpg /etc/apt/trusted.gpg.d/ \
  && echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" > /etc/apt/sources.list.d/bazel.list \
  && apt-get update \
  && apt-get install -y bazel \
  && rm -rf /var/lib/apt/lists/*

RUN groupadd -g 1000 user \
  && useradd -d /home/user -m -u 1000 -g 1000 user \
  && chown -R user:user /home/user \
  && mkdir -p /bazel/cache \
  && chown -R user:user /bazel

RUN echo "build --repository_cache=/bazel/cache">/home/user/.bazelrc

И может быть построен с:

docker build -t docker-unit-test .

Теперь у нас есть образец докера, который мы настроили в качестве root, но на CI, мы хотим подражать среду создания разработчиков максимально возможным, чтобы сделать это, мы будем запускать сборку в качестве неправочного пользователя.

Что может пойти не так?

Многое на самом деле!

У пользователя собственные файлы конфигурации сборки? Или папка кэша? Ну, вы можете проверить все это, прежде чем развернуть изображение докера в любом месте.

Давайте создадим Unit-test.yaml Чтобы проверить это!

schemaVersion: '2.0.0'
fileExistenceTests:
  - name: 'Check bazel cache folder'
    path: '/bazel/cache'
    shouldExist: true
    uid: 1000
    gid: 1000
    isExecutableBy: 'group'
fileContentTests:
  - name: 'Cache folder config'
    path: '/home/user/.bazelrc'
    expectedContents: ['.*build --repository_cache=/bazel/cache.*']

Первый тест Проверьте папку Bazel Cache Убежно проверить, что папка кэша существует и принадлежит пользователю Non-root. Второй тест Кэш Папка конфиг Убежно проверять, что содержимое файла конфигурации Bazel Build настолько ожидается.

Все установлено, мы можем запустить наш тест таким образом:

$ container-structure-test test --image docker-unit-test --config unit-test.yaml

=======================================
====== Test file: unit-test.yaml ======
=======================================
=== RUN: File Content Test: cache folder config
--- PASS
duration: 0s
=== RUN: File Existence Test: Check bazel cache folder
--- PASS
duration: 0s

=======================================
=============== RESULTS ===============
=======================================
Passes:      2
Failures:    0
Duration:    0s
Total tests: 2

PASS

Эта структура может быть супер полезной для тестирования вашего образа Docker перед отправкой его, это быстро и легко в использовании.

Автоматизировать тестирование контейнеров докеров

Хорошо, теперь у нас есть наш DockerFile и Tests Ready, пришло время автоматизировать процесс тестирования!

В этом примере я предполагаю, что у вас есть Anbible Трубопровод, который вы используете в Integration Continuos, чтобы построить, тег и толкать изображение докера. Мы собираемся создать новую задачу для этого трубопровода для выполнения теста докера.

- name: unit test Docker Image
  shell: |
    container-structure-test test --image {{ docker_image }} --config {{ test_file }}
    if $?
    then
      echo "Test Failed"
      exit 1
    else
      echo "Test Succeeded"
      exit 0
    fi

Это оно!

Добраться до меня в Twitter @Gasparevitta и Позвольте мне знать ваши мысли!

Я надеюсь, что вы найдете его полезным, и вы начнете тестировать свой DockerFile отныне.

Вы можете найти фрагменты кода на Гадость

Эта статья была первоначально опубликована на мой блог . Голова там, если вам нравится этот пост и хочу прочитать других, как это!

Оригинал: «https://dev.to/gasparev/docker-unit-test-how-to-test-a-dockerfile-guide-2020-435d»