如何在CI/CD多阶段间共享BACKUP_FOLDER_NAME这类自定义变量?
在CI/CD多阶段中共享生成的文件夹名称并创建文件夹
在CI/CD流程中,不同阶段的Job运行在独立的执行环境中,默认环境变量无法跨阶段共享。要实现“在一个阶段生成文件夹名称,另一个阶段使用该名称创建文件夹”,可以通过以下两种常见方式实现:
方法1:通过Artifacts保存变量值到文件传递
这种方式适用于大多数CI/CD平台(如GitLab CI、GitHub Actions等),核心思路是把生成的文件夹名称写入文件,通过Artifacts传递到后续阶段,再读取文件内容复用变量。
示例CI配置:
stages: - generate_folder_name - create_folder generate_folder_name: stage: generate_folder_name before_script: - cd publish - export TZ=Europe/Madrid - ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - export BACKUP_FOLDER_NAME=$(date +%Y%m%d.%H%M) script: # 将变量值写入文件,注意路径对应之前cd的publish目录 - echo "$BACKUP_FOLDER_NAME" > backup_folder_name.txt artifacts: # 指定要传递的文件路径 paths: - publish/backup_folder_name.txt # 可选:设置文件过期时间,避免占用存储 expire_in: 1h create_folder: stage: create_folder # 依赖前一个阶段的Job,确保先执行并下载Artifacts needs: ["generate_folder_name"] script: - cd publish # 读取文件内容,赋值给变量 - BACKUP_FOLDER_NAME=$(cat backup_folder_name.txt) # 创建目标文件夹 - mkdir -p "$BACKUP_FOLDER_NAME"
方法2:通过Dotenv Artifacts自动注入环境变量(GitLab CI专属)
如果使用GitLab CI,可以利用dotenv类型的Artifacts,直接把变量导出为环境变量文件,后续阶段的Job会自动加载这些变量,无需手动读取文件。
示例CI配置:
stages: - generate_folder_name - create_folder generate_folder_name: stage: generate_folder_name before_script: - cd publish - export TZ=Europe/Madrid - ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - export BACKUP_FOLDER_NAME=$(date +%Y%m%d.%H%M) script: # 生成符合dotenv格式的文件,变量名=变量值 - echo "BACKUP_FOLDER_NAME=$BACKUP_FOLDER_NAME" > backup_vars.env artifacts: reports: # 指定dotenv类型的报告文件 dotenv: publish/backup_vars.env expire_in: 1h create_folder: stage: create_folder needs: ["generate_folder_name"] script: - cd publish # 直接使用自动注入的环境变量创建文件夹 - mkdir -p "$BACKUP_FOLDER_NAME"
内容的提问来源于stack exchange,提问作者Negin
相关产品推荐
相关产品推荐

