【问题标题】:.gitlab-ci stages execution order.gitlab-ci 阶段执行顺序
【发布时间】:2019-09-21 01:22:51
【问题描述】:

我有这个 .gitlab-ci.yml 文件:

stepA:
  script:
    - echo "A"
deploy:
  script:
    - echo "1"
stepB:
  script:
    - echo "B"

如何设置首先运行哪个阶段? 一些作业可以由多个 gitlab 运行器并行运行。 我只是想确保在运行部署阶段之前完成步骤 A 到 B

【问题讨论】:

  • 你的问题很混乱。您想确保在部署 A 和 B 步骤之前完成?
  • 是的,这就是我想要的
  • 刚刚创建示例管道并更新了答案

标签: gitlab gitlab-ci gitlab-ci-runner


【解决方案1】:

这正是stages 的用途。在实际描述“工作”时,您在这里使用了“阶段”一词。

同一阶段的作业可以并行运行(如果您有跑步者支持它),但阶段按顺序运行。

首先在 .gitlab-ci.yml 的顶层定义你的 2 个阶段:

stages:
  - build
  - dist

然后在每个作业上,指定它所属的阶段:

stepA:
  stage: build
  script:
    - echo "A"
deploy:
  stage: dist
  script:
    - echo "1"
stepB:
  stage: build
  script:
    - echo "B"

现在stepAstepB 将首先运行(以任何顺序甚至并行),然后是deploy,前提是第一阶段成功。

【讨论】:

  • 我有一个问题:stepA 和 stepB 生成的文件没有保存到部署阶段
  • 你想要的是关于工作的artifactsdepends 部分。指定一个作业生成的文件,然后指定另一个作业需要具有依赖关系的结果的作业。
  • 但是如何强制两个“构建​​”阶段的顺序?
  • @swade 更正您的术语以帮助进行谷歌搜索:这里在一个“构建”阶段中有两个作业。您无法控制阶段内作业的顺序。因此,如果您需要在“stepB”之前运行“stepA”,那么在构建之前创建一个新阶段并将“stepA”移动到新的早期阶段。
  • @SpencerPark 啊,真可惜。对我来说,这只是一个挑剔的 UI。
【解决方案2】:

以下代码在inheritance中使用

Stages:
  - Step-A
  - Step-B
  - Deploy

.Perform-Step-A:
  stage: Step-A
  script:
   - echo "A"

.Perform-Step-B:
  stage: Step-B
  script:
   - echo "B"

.Perform-Deploy:
  stage: Deploy
  script:
   - echo "1"

Server1-Step-A:
  extends: .Perform-Step-A
  tags: Server-1-As-Runner //Else add SSH steps in Perfrom-A block

Server1-Step-B:
  extends: .Perform-Step-B
  tags: Server-1-As-Runner //Else add SSH steps in Perfrom-B block

Server1-Step-Deploy:
  extends: .Perform-Deploy
  tags: Server-1-As-Runner //Else add SSH steps in Perfrom-Deploy block

假设:

  1. 您正在为您的应用程序使用专用的运行器,并且在同一台机器上配置了运行器。如果没有,请随时修改和 ssh 步骤。
  2. 这是我在这里回答的概念构建块,可以根据要求进行调整。

  3. 一次部署在多台服务器上时效果最好。

注意:出于隐私原因,标签已从图片中删除。

【讨论】:

  • 非常感谢。最后一个问题:“协调员”服务在哪里?如果跑步者不在同一台服务器上会发生什么?协调器是放置在每个服务器上还是公共协调器。谢谢
  • Coordinator 是 GitLab CI 服务的核心,它构建 Web 界面并控制运行器(构建实例)。在 GitLab CI 中,运行器运行 .gitlab-ci.yml 中定义的代码。它们是隔离的(虚拟)机器,通过 GitLab CI 的协调器 API 获取工作。所以它应该是 gitlab 服务器上的 Installed 并在每个 runner 上配置。
  • 如果您想在多台服务器上部署应用程序并且不想陷入 SSH 密钥中断的开销。我建议的方法可以正常工作。示例:如果您想在多台服务器上部署您的应用程序,那么在每台部署服务器上安装 individual 运行器并在 .gitlab-ci.yml 中使用它们即可。
  • 如果您不想使用特定的运行器(必须使用共享),那么您可能必须从共享运行器 ssh 到您的部署服务器,然后是部署步骤。几个示例以供理解。 codeburst.io/…forum.gitlab.com/t/…
猜你喜欢
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 2015-06-30
  • 2023-02-05
  • 2016-11-19
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多