查看“GitLab 流水线架构”的源代码
←
GitLab 流水线架构
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
构建流水线的主要方法有三种,每种方法都有自己的优势。如果需要,可以混合和匹配这些方法: * 基本:适用于所有配置都集中在一个易于找到的地方的简单项目。 * 有向无环图:适用于需要高效执行的大型复杂项目。 * 父子流水线:适用于具有大量独立定义组件的 monorepos 和项目。 <br> == 基本流水线 == 这是极狐GitLab 中最简单的流水线。它同时运行构建阶段的所有内容,一旦所有这些都完成,它会以相同的方式运行测试阶段的所有内容,依此类推。 这不是最有效的,如果您有很多步骤,它会变得非常复杂,但更容易维护: <br> <pre>stages: - build - test - deploy image: alpine build_a: stage: build script: - echo "This job builds something." build_b: stage: build script: - echo "This job builds something else." test_a: stage: test script: - echo "This job tests something. It will only run when all jobs in the" - echo "build stage are complete." test_b: stage: test script: - echo "This job tests something else. It will only run when all jobs in the" - echo "build stage are complete too. It will start at about the same time as test_a." deploy_a: stage: deploy script: - echo "This job deploys something. It will only run when all jobs in the" - echo "test stage complete." environment: production deploy_b: stage: deploy script: - echo "This job deploys something else. It will only run when all jobs in the" - echo "test stage complete. It will start at about the same time as deploy_a." environment: production</pre> <br> == 有向无环图流水线 == 如果效率对您很重要,并且您希望一切都尽可能快地运行,则可以使用有向无环图(DAG)。 使用 needs 关键字 定义作业之间的依赖关系。当系统知道您的作业之间的关系时,它可以尽可能快地运行所有内容,甚至在可能的情况下跳到后续阶段。 在下面的示例中,如果 build_a 和 test_a 比 build_b 和 test_b 快得多,即使 build_b 仍在运行,系统也会启动 deploy_a。 <br> <pre>stages: - build - test - deploy image: alpine build_a: stage: build script: - echo "This job builds something quickly." build_b: stage: build script: - echo "This job builds something else slowly." test_a: stage: test needs: [build_a] script: - echo "This test job will start as soon as build_a finishes." - echo "It will not wait for build_b, or other jobs in the build stage, to finish." test_b: stage: test needs: [build_b] script: - echo "This test job will start as soon as build_b finishes." - echo "It will not wait for other jobs in the build stage to finish." deploy_a: stage: deploy needs: [test_a] script: - echo "Since build_a and test_a run quickly, this deploy job can run much earlier." - echo "It does not need to wait for build_b or test_b." environment: production deploy_b: stage: deploy needs: [test_b] script: - echo "Since build_b and test_b run slowly, this deploy job will run much later." environment: production</pre> <br> == 父子流水线 == 随着流水线变得越来越复杂,一些相关的问题开始出现: * 分阶段结构,一个阶段中的所有步骤必须在下一阶段的第一个作业开始之前完成,这会导致等待,从而减慢速度。 * 单一全局流水线的配置变得难以管理。 * 使用 include 的导入会增加配置的复杂性,并可能导致无意中重复作业的命名空间冲突。 * 流水线 UX 有太多的作业和阶段需要处理。 此外,有时流水线的行为需要更加动态。选择启动(或不启动)子流水线的能力是一项强大的能力,尤其是在动态生成 YAML 的情况下。 <br> 父子流水线将配置分成多个文件,使事情变得更简单。 您可以将父子流水线与以下结合: * rules 关键字:例如,仅在该区域发生更改时才触发子流水线。 * include 关键字:引入常见行为,确保您不会重复自己。 * 子流水线内部的 DAG 流水线,获取两者的所有优势。 <br> <pre>stages: - triggers trigger_a: stage: triggers trigger: include: a/.gitlab-ci.yml rules: - changes: - a/* trigger_b: stage: triggers trigger: include: b/.gitlab-ci.yml rules: - changes: - b/* 示例子流水线 a 配置,位于 /a/.gitlab-ci.yml 中,使用 DAG needs 关键字: stages: - build - test - deploy image: alpine build_a: stage: build script: - echo "This job builds something." test_a: stage: test needs: [build_a] script: - echo "This job tests something." deploy_a: stage: deploy needs: [test_a] script: - echo "This job deploys something." environment: production 示例子流水线 b 配置,位于 /b/.gitlab-ci.yml 中,使用 DAG needs 关键字: stages: - build - test - deploy image: alpine build_b: stage: build script: - echo "This job builds something else." test_b: stage: test needs: [build_b] script: - echo "This job tests something else." deploy_b: stage: deploy needs: [test_b] script: - echo "This job deploys something else." environment: production</pre> 也可以将作业设置为在触发子流水线之前或之后运行,例如,如果您有通用的设置步骤或最后的统一部署。
返回至“
GitLab 流水线架构
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息