如何将变量导出到CICD的所有阶段?

问题描述 投票:0回答:1

我有一些阶段,我需要在一个阶段中为文件夹创建一个名称,并在另一个阶段中使用它。就像下面的代码:

  ...
  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 中的日期。 如何做到这一点?

gitlab-ci gitlab-ci-runner cicd
1个回答
1
投票

您可以使用

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
对于同一管道中的所有作业来说都是相同的值。

© www.soinside.com 2019 - 2024. All rights reserved.