我有一些阶段,我需要在一个阶段中为文件夹创建一个名称,并在另一个阶段中使用它。就像下面的代码:
...
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)
...
现在我想在另一个阶段创建一个文件夹,并将其命名为 BACKUP_FOLDER_NAME 中的日期。 如何做到这一点?
您可以使用
dotenv
报告工件通过工件将变量传递到后续阶段/作业
set-variables:
stage: .pre # always the first stage in a pipeline
script:
# ... set your variables
# create the dotenv file
- echo "BACKUP_FOLDER_NAME=${BACKUP_FOLDER_NAME}" > vars.env
artifacts:
reports:
dotenv: "vars.env"
build:
stage: build
script:
# this variable was set automatically by the artifact
- echo "$BACKUP_FOLDER_NAME"
# ...
但是,如果您只想让管道中的所有作业使用通用时间,则可以使用预定义变量
$CI_PIPELINE_CREATED_AT
,它是管道创建时间的 ISO8601 时间戳(例如 2023-07-17T17:11:20Z
)。
before_script:
# in case your image doesn't have tzdata configured use this step:
- DEBIAN_FRONTEND=noninteractive apt update && apt install -y tzdata
# use $CI_PIPELINE_CREATED_AT to form the backup folder name:
- BACKUP_FOLDER_NAME=$(TZ='Europe/Madrid' date -d "$CI_PIPELINE_CREATED_AT" +%Y%m%d.%H%M)
- echo "backup folder is ${BACKUP_FOLDER_NAME}"
在这种情况下,您不必在作业之间传递任何变量,因为
CI_PIPELINE_CREATED_AT
对于同一管道中的所有作业来说都是相同的值。