部署应用时如何为生成的Zip文件名添加时间戳?
给部署生成的Zip文件添加时间戳的实现方案
根据不同的部署环境和工具,以下是几种实用的实现方式:
1. Shell脚本/命令行场景
如果是通过Shell命令直接打包,核心思路是先生成格式化的时间戳,再将其拼接到Zip文件名中:
生成时间戳变量(格式可自定义):
# 生成如20240520_143025的时间戳 timestamp=$(date +%Y%m%d_%H%M%S) # 也可以用带横杠的格式:2024-05-20_14-30-25 # timestamp=$(date +%Y-%m-%d_%H-%M-%S)执行打包命令时拼接文件名:
# 假设要打包的应用目录是./dist,生成的Zip文件名为app_时间戳.zip zip "app_${timestamp}.zip" ./dist/*
2. Python脚本场景
如果用Python编写部署脚本,借助datetime和zipfile模块实现:
from datetime import datetime from zipfile import ZipFile import os # 生成时间戳 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") zip_filename = f"app_{timestamp}.zip" # 打包指定目录下的文件 with ZipFile(zip_filename, 'w') as zf: for root, dirs, files in os.walk('./dist'): for file in files: file_path = os.path.join(root, file) zf.write(file_path, os.path.relpath(file_path, './dist'))
3. CI/CD流水线场景(以GitHub Actions为例)
在自动化部署流水线中,直接在步骤里生成时间戳并打包:
jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Build app run: npm run build # 假设是Node.js项目的构建命令 - name: Package with timestamp run: | timestamp=$(date +%Y%m%d_%H%M%S) zip "app_${timestamp}.zip" ./dist/*
如果是GitLab CI,可以直接使用内置的$CI_JOB_STARTED_AT变量(格式为YYYY-MM-DDTHH:MM:SSZ,可按需处理):
deploy: image: alpine:latest script: - apk add zip - timestamp=$(echo $CI_JOB_STARTED_AT | sed 's/[:T]/_/g' | cut -d'Z' -f1) - zip "app_${timestamp}.zip" ./build/*
4. Node.js脚本场景
用archiver库打包时添加时间戳:
const archiver = require('archiver'); const fs = require('fs'); const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); // 生成如2024-05-20T14-30-25-123的时间戳 const zipFilename = `app_${timestamp}.zip`; const output = fs.createWriteStream(zipFilename); const archive = archiver('zip', { zlib: { level: 9 } }); output.on('close', () => console.log(`打包完成:${zipFilename}`)); archive.pipe(output); archive.directory('./dist', false); // 打包dist目录下所有内容 archive.finalize();
内容的提问来源于stack exchange,提问作者Dimitrios Desyllas
相关产品推荐
相关产品推荐

