如何在Gitlab桥接作业中使用脚本

47次阅读
没有评论

问题描述

在Gitlab中有一个作业,需要包含另一个作业,并且需要向一个变量追加一个值,例如:

nightlies:
  variables:
    BUILD_NAME: "nightly"
  script:
    - $BUILD_NAME="${BUILD_NAME}-$(date +"%Y%m%d")"
  only:
    - schedules
  trigger:
    include:
      - local: /.gitlab-ci/build.yml
  strategy: depend

然而,根据文档,scripttrigger不能同时使用,我不确定如何以其他方式创建带有日期的BUILD_NAME。是否有办法同时使用这两个功能?否则,是否有办法删除触发器以使用脚本,但仍然调用该作业?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

一种方法是从另一个作业中继承环境变量。你可以创建两个不同的作业,一个用于创建环境变量,另一个用于触发本地CI流水线。
完成后,你应该有如下内容:

stages:
  - build
  - deploy

nightlies_env:
  stage: build
  variables:
    BUILD_NAME: "nightly"
  script:
    - BUILD_NAME="${BUILD_NAME}-$(date +"%Y%m%d")"
    - echo "BUILD_NAME=$BUILD_NAME" >> build.env
  artifacts:
    reports:
      dotenv: build.env

nightlies:
  stage: deploy
  variables:
    BUILD_NAME: $BUILD_NAME
  trigger:
    include: build.yml
    strategy: depend

方案2

使用before_script在文件的根目录中也是一个选择,但似乎在那里创建的变量无法导出,我不知道如何使其对BUILD_NAME变量可访问。
另一种方法是使用before_script在文件的根目录中创建变量。这样可以确保变量在整个CI流水线中可用。以下是一个示例:

before_script:
  - export BUILD_NAME="nightly"
  - export BUILD_NAME="${BUILD_NAME}-$(date +"%Y%m%d")"

nightlies:
  script:
    - echo $BUILD_NAME

在上面的示例中,我们在before_script中创建了一个名为BUILD_NAME的变量,并将其设置为nightly。然后,我们使用date命令将当前日期追加到变量中。在nightlies作业中,我们使用echo命令打印出BUILD_NAME的值。
这样,你就可以在整个CI流水线中使用BUILD_NAME变量了。

正文完