GitLab CI CD jobs

GitLab CI CD jobs

Posted by WTJ on January 3, 2019

目录

管道配置从作业开始。作业是文件的最基本元素.gitlab-ci.yml。

Jobs是:

  • 用约束来定义,说明它们应该在什么条件下执行。
  • script具有任意名称且必须至少包含子句的顶级元素。
  • 可以定义的数量不受限制。

例如:

job1:
  script: "execute-script-for-job1"

job2:
  script: "execute-script-for-job2"

上面的示例是最简单的 CI/CD 配置,具有两个单独的作业,其中每个作业执行不同的命令。当然,命令可以直接执行代码(./configure;make;make install)或在存储库中运行脚本(test.sh)。

job由runners拾取并在跑步者的环境中执行。重要的是每个作业彼此独立运行。

查看管道中的作业 访问管道时,您可以查看该管道的相关作业。

单击单个作业会显示其作业日志,并允许您:

  • 取消作业。
  • 重试作业。
  • 清除作业日志

查看项目中的所有作业

要查看项目中运行的作业的完整列表:

  1. 在顶部栏上,选择Menu > Projects并找到该项目。
  2. 在左侧边栏上,选择CI/CD > Jobs。

管道中作业的顺序

管道中作业的顺序取决于管道图的类型。

  • 对于完整的管道图,作业按名称排序。
  • 对于管道迷你图,作业按状态排序,然后按名称排序。 作业状态顺序为:

  • 失败的
  • 警告
  • 待办的
  • 跑步
  • 手动的
  • 预定的
  • 取消
  • 成功
  • 跳过
  • 创建

例如: pipelines_mini_graph_sorting

职位名称限制

版本历史

image services stages types before_script after_script variables cache include true false nil

作业名称不得超过 255 个字符。

为您的工作使用唯一名称。如果多个作业具有相同的名称,则只会将一个添加到管道中,并且很难预测会选择哪一个。

在管道中分组作业

如果您有许多类似的工作,您的管道图就会变得很长且难以阅读。

您可以自动将相似的工作组合在一起。如果作业名称以某种方式格式化,它们将在常规管道图(而不是迷你图)中折叠成一个组。

如果您没有看到其中的重试或取消按钮,您可以识别管道何时已分组作业。将鼠标悬停在它们上会显示分组作业的数量。选择以展开它们。

pipeline_grouped_jobs_v14_2

要创建一组作业,请在CI/CD 管道配置文件中,用数字和以下内容之一分隔每个作业名称:

斜线 ( /),例如slash-test 1/3, slash-test 2/3, slash-test 3/3。 冒号 ( :),例如colon-test 1:3, colon-test 2:3, colon-test 3:3。 一个空格,例如space-test 0 3, space-test 1 3, space-test 2 3。 您可以互换使用这些符号。

在下面的示例中,这三个作业位于一个名为 的组中build ruby:

build ruby 1/3:
  stage: build
  script:
    - echo "ruby1"

build ruby 2/3:
  stage: build
  script:
    - echo "ruby2"

build ruby 3/3:
  stage: build
  script:
    - echo "ruby3"

管道图显示了一个以build ruby三个作业命名的组。

通过从左到右比较数字来对作业进行排序。您通常希望第一个数字是索引,第二个数字是总数。

隐藏职位

要暂时禁用作业而不将其从配置文件中删除:

  • 注释掉作业的配置:
# hidden_job:
#   script:
#     - run test
  • 作业名称以点 ( .) 开头,GitLab CI/CD 不处理它:
.hidden_job:
  script:
    - run test

您可以使用.以模板开头的隐藏作业作为可重用配置的模板:

控制默认关键字和全局变量的继承

您可以控制以下内容的继承:

For example:

default:
  image: 'ruby:2.4'
  before_script:
    - echo Hello World

variables:
  DOMAIN: example.com
  WEBHOOK_URL: https://my-webhook.example.com

rubocop:
  inherit:
    default: false
    variables: false
  script: bundle exec rubocop

rspec:
  inherit:
    default: [image]
    variables: [WEBHOOK_URL]
  script: bundle exec rspec

capybara:
  inherit:
    variables: false
  script: bundle exec capybara

karma:
  inherit:
    default: true
    variables: [DOMAIN]
  script: karma

在这个例子中:

rubocop: 继承:没有。 rspec: 继承:默认值image和WEBHOOK_URL变量。 不继承:默认值before_script和DOMAIN变量。 capybara: 继承:默认before_script和image. 不继承:DOMAINandWEBHOOK_URL变量。 karma: 继承:默认值imageandbefore_script和DOMAIN变量。 不继承:WEBHOOK_URL变量。

Jobs