gitlab-ci.yml 中的动态作业依赖关系取决于矩阵中的作业变体

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

我有一个构建作业,可以在并行作业中构建多个变体:

build-firmware:
  stage: build
  script: |
    echo "Building ${BOARD}_${BUILD_TYPE}"
  artifacts:
    paths:
      - firmware_${BOARD}_${BUILD_TYPE}.bin
  parallel:
    matrix:
      - BOARD: [board1, board2]
        BUILD_TYPE: [debug, release]

这将创造 4 个就业机会,即

board1_debug
board1_release
board2_debug
board2_release

我还有一个发布作业,它也具有相同的矩阵,并且应该从相应的构建作业中发布工件。由于构建需要很长时间,我并不总是等待所有构建完成,所以我只是取消不需要的构建。在这种情况下,我需要在发布作业中进行依赖项/需求设置,以依赖于相应的构建变体,而不是所有构建作业。否则它就会被跳过,因为有取消的作业。

我正在寻找这样的语法,但显然在 gitlab 中的

needs
指令中不可能有占位符:

release-firmware:
  stage: release
  needs:
    - job: build-firmware:${BOARD}:${BOOT_TYPE}:${BUILD_TYPE}
  script: |
      echo "Releasing firmware for ${BOARD} ${BOOT_TYPE} ${BUILD_TYPE}"
  parallel:
    matrix:
      - BOARD: [board1, board2]
        BUILD_TYPE: [debug, release]
gitlab-ci gitlab-ci.yml
1个回答
0
投票

使用

parallel:matrix
是不可能的,但您可以使用 inputs。它的工作原理类似于函数。使用
spec:inputs
定义添加到管道时可以填充到可重用 CI/CD 配置文件中的参数。

首先在另一个文件(

build-firmware.yml
)中,我们定义可重用代码(注意规范和函数之间应该有
---

# build-firmware.yml
spec:
  inputs:
    BOARD:
      description: "The Board."
      options: ['board1', 'board2']
    BUILD_TYPE:
      description: "The build type."
      options: ['debug', 'release']
---

"build-firmware-$[[ inputs.BOARD ]]-$[[ inputs.BUILD_TYPE ]]":
  stage: $[[ inputs.BUILD_TYPE ]]
  script: |
    echo "Building $[[ inputs.BOARD ]]_$[[ inputs.BUILD_TYPE ]]"
  artifacts:
    paths:
      - firmware_$[[ inputs.BOARD ]]_$[[ inputs.BUILD_TYPE ]].bin

"release-firmware-$[[ inputs.BOARD ]]-$[[ inputs.BUILD_TYPE ]]":
  stage: $[[ inputs.BUILD_TYPE ]]
  script: |
    echo "Releasing firmware for $[[ inputs.BOARD ]] $[[ inputs.BUILD_TYPE ]]"
  needs:
    - job: build-firmware-$[[ inputs.BOARD ]]-$[[ inputs.BUILD_TYPE ]]

然后在您的

.gitlab-ci.yml
中,我们将它们包含在值中:

# .gitlab-ci.yml

include:
  - local: 'build-test.yml'
    inputs:
      BOARD: board1
      BUILD_TYPE: debug
  - local: 'build-test.yml'
    inputs:
      BOARD: board2
      BUILD_TYPE: release
© www.soinside.com 2019 - 2024. All rights reserved.