我有一个我无法正确理解的 Gitlab-CI 用例。背景是我有多个环境需要构建和部署自己的工件。假设一个简化的情况如下所示:
stages:
- build
- deploy
AppOne:Build:
extends: .build
environment:
name: AppOne
AppOne:Deploy:
extends: .deploy
needs: ['AppOne:Build']
environment:
name: AppOne
AppTwo:Build:
extends: .build
environment:
name: AppTwo
AppTwo:Deploy:
extends: .deploy
needs: ['AppTwo:Build']
environment:
name: AppTwo
.build:
stage: build
script:
- build.sh
.deploy:
stage: deploy
when: manual
script:
- deploy.sh
上面的过程是有效的,但正如你所看到的,它有点漫长且重复,有两个应用程序和超级简单的过程。真实的过程分为三个阶段和多达 20 个应用程序。我想知道是否有更好的方式来表达这一点?除了变量(在环境中设置)之外,构建过程是相同的。
我想我主要想知道是否有更好的方式来表达“需求”,而不必为每个应用程序重复它,即需要先构建应用程序,然后才能手动部署。我可以做
needs: ['${NAME}:Build']
但这需要 $NAME:Build
步骤实际存在。
请帮忙,哦互联网的集体智慧。
现在(2023 年第 3 季度)可能会得到 GitLab 16.3(2023 年 8 月)的支持:
对并行作业使用 need 关键字
关键字用于定义作业之间的依赖关系。您可以使用关键字将作业配置为依赖于特定的早期作业,而不是遵循阶段顺序。当相关作业完成后,作业可以立即开始,从而加快管道速度。needs
以前,无法使用
关键字将 并行矩阵 作业设置为从属作业,但在此版本中,我们也启用了将needs
与并行矩阵作业一起使用的功能。needs
您现在可以定义与并行矩阵作业的灵活依赖关系,这可以帮助进一步加快管道速度!您的工作越早开始,您的管道就能越早完成!