问题描述
在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
然而,根据文档,script
和trigger
不能同时使用,我不确定如何以其他方式创建带有日期的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
变量了。
正文完