Чтобы предоставить практический пример попытки создания действительно повторяемой сборки, рассмотрите следующее:
Конвейер сборки, который начинается с git-репозитория, для которого ни один пользователь не может переписать историю или удалить не слитые ветки.
Первый шаг «сборки» после проверки исходного кода заключается в раскрутке контейнера, который содержит все зависимости времени сборки.
Результатом работы контейнера времени сборки является контейнер, который содержит скомпилированный двоичный файл.
Более важно для повторяемости сборки следующие теги добавляются в окончательный контейнер:
- Точный хэш исходного кода в исходном репозитории и URL-адрес как репозитория git, так и снимка tar-шара кода, загруженного в репозиторий артефактов.
- Точная версия контейнера сборки, которая использовалась для запуска сборки.
- Точная версия исходного базового образа, в который был загружен бинарный файл.
- Значения всех переменных времени сборки, используемых для создания двоичного файла.
- Версия докера, в которой были собраны все три контейнера, а также версия, в которой они работали.
Добавляя все эти метаданные, мы можем гарантировать, что в любой момент в будущем мы сможем извлечь точный набор зависимостей сборки (через контейнер сборки), скомпилировать двоичный файл с точно известным набором шагов (закрепленным в контейнере сборки). ) и упакуйте его в другой известный базовый образ со всеми зависимостями времени выполнения (используя тег базового изображения), и все это может основываться на точной правильной версии исходного кода на основе тега на контейнере.
Теоретически это должно дать нам возможность точно воспроизводить версию сборки.
Важность этого заключается в том, что он позволяет нам смотреть на то, что работает в производстве, и, даже если все значительно улучшилось в версиях, вернуться назад и извлечь версию кода, базового образа и контейнера сборки, которые изначально использовались, чтобы мы могли, например, Примените оперативное исправление к этой версии перед тем, как перестраивать точно так же, как и раньше, чтобы мы могли повторно развернуть, зная, что это точно такой же артефакт с единственной дельтой, являющейся оперативным исправлением.