Как я могу использовать shutil.make_archive () для создания zip -файлов, которые абсолютно идентичны, включая хэш? Через CI/CD, и я ожидаю, что они будут идентичны, но хэши различаются. Это заставляет CI/CD думать, что файлы различны, и он пытается обновление, которое нежелательно, поскольку это приведет к тому, что обновление будет сделано из каждого случая, даже если не было внесено никаких изменений.
Были приняты следующие меры предосторожности, чтобы гарантировать, что пакеты на молнии идентичны, однако я явно что -то упускаю. Сначала удаляется, чтобы обеспечить каталог чистых пакетов.
[*] Пакеты устанавливаются пользователем root.
Все __pycache __ каталоги удаляются . < /li>
Последнее доступное и измененное время каждого файла изменяется, чтобы убедиться, что они совпадают. < /li>
< /ul>
Есть что -то Больше (или другого) я могу сделать, чтобы убедиться, что хэши файлов zip всегда будут одинаковыми, учитывая, что содержимое точно такое же? Хэш ZIP -файла, используя FileBase64SHA256 ("packages.zip") . Я не верю, что это имеет значение, но в любом случае подумал, что это стоит упомянуть.#!/bin/bash
REQUIREMENTS_FILE="requirements.txt"
REQUIREMENTS_DIR="packages/"
REQUIREMENTS_ZIP="packages.zip"
rm -rf $REQUIREMENTS_DIR
pip install --upgrade --force-reinstall --no-cache-dir -r $REQUIREMENTS_FILE -t $REQUIREMENTS_DIR
find $REQUIREMENTS_DIR | grep -E "(__pycache__|\.pyc$)" | xargs rm -rf
find $REQUIREMENTS_DIR -exec touch -t 200010101010 {} +
# Call out to zip.py to create the archive.
python $(dirname "$0")/assets/zip.py $REQUIREMENTS_DIR $REQUIREMENTS_ZIP
< /code>
zip.py
import argparse
import logging
import os
import zipfile
###
# Create a zip archive.
# It is intended that this script will be executed by the 'create_archives.sh'
# script, as part of the 'py:install' CI/CD pipeline job.
###
# Configure logging
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s')
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# Configure args
parser = argparse.ArgumentParser(prog='zip.py',
add_help=False,
allow_abbrev=False,
description='Create a zip archive.')
parser.add_argument('src', help='Path to the source of the archive to create.')
parser.add_argument('dst', help='Path to the destination of the new archive.')
parser.add_argument('-p', dest='include_path', action='store_true',
help='Whether to include the path to `src` in the archive')
def zip(src: str, dst: str, include_path: bool=False) -> None:
'''Create a zip archive.
Args:
src (str): Path to the source of the archive to create.
dst (str): Path to the destination of the new archive.
include_path (bool=False): Whether to include the path to `src` in the
archive.
'''
with zipfile.ZipFile(dst, "w", zipfile.ZIP_DEFLATED) as zf:
abs_src = os.path.abspath(src)
for dirname, _, files in os.walk(src):
for filename in files:
absname = os.path.abspath(os.path.join(dirname, filename))
arcname = absname if include_path else absname[len(abs_src) + 1:]
zf.write(absname, arcname)
if __name__ == '__main__':
# Parse args.
args = parser.parse_args()
# Create zip archive.
logger.info("Creating zip archive '%s' from source '%s'.",
args.dst, args.src)
zip(**vars(args))
Подробнее здесь: https://stackoverflow.com/questions/793 ... eated-duri
Как обеспечить, чтобы хэш Zip -файла, созданный локально, идентичен при создании во время CI/CD, используя точно такое ж ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Android реализует объекты Parcelable с хэш-картой, которая содержит другую хэш-карту
Anonymous » » в форуме Android - 0 Ответы
- 128 Просмотры
-
Последнее сообщение Anonymous
-