Pipelines 工作流

工作流部分定义了一系列步骤,包括代码构建,代码测试和代码部署。工作流根据各个步骤的定义位置按顺序执行。如果一个步骤返回了非 0 的退出代码(non-zero exit code),工作流将立即停止并返回一个错误状态。

示例工作流

pipeline:
  backend:
    image: golang
    commands:
      - go build
      - go test
  frontend:
    image: node
    commands:
      - npm install
      - npm run test
      - npm run build

在上面的示例中,我们定义了两个工作流步骤,frontendbackend。这两个步骤的名字可以是任意指定的。

构建步骤

构建步骤是工作流在 Docker 容器中执行的任意命令。这些命令将工作区(workspace)作为工作路径。

pipeline:
  backend:
    image: golang
    commands:
+     - go build
+     - go test

这里没有什么魔法。上面的命令(commands)将会被转换成简单的 Shell 脚本。上面的命令被大致转换为下面的脚本:

#!/bin/sh
set -e

go build
go test

上面的脚本在之后会被作为 Docker 的入口。下面的 docker 命令,作为一个不完整的例子,展示了这个脚本是如何被执行的。

docker run --entrypoint=build.sh golang

并行执行

Drone 支持在同一个示例上并行执行多个步骤。使用 group 属性来配置并行步骤,这将让工作流执行者(pipeline runner)并行执行指定的命令。

并行执行配置示例:

pipeline:
  backend:
+   group: build
    image: golang
    commands:
      - go build
      - go test
  frontend:
+   group: build
    image: node
    commands:
      - npm install
      - npm run test
      - npm run build
  publish:
    image: plugins/docker
    repo: octocat/hello-world

在上面到例子中,frontendbackend将并行执行。在这两组任务完成之前,publish 步骤将不会执行。

条件执行

Drone 可以有条件地执行步骤。下面的例子限制了使用 Slack 插件的 Git 分支:

pipeline:
  slack:
    image: plugins/slack
    channel: dev
+   when:
+     branch: master

故障执行

Drone 使用容器退出代码来决定一个构建到成功或者失败。非 0 退出代码(Non-zero exit codes)使构建失败,同时立即退出当前工作流。

有的时候需要在构建失败时,执行特定的工作流步骤。可以使用状态条件限制(status constraint)来修改构建失败时的默认行为和执行步骤。

pipeline:
  slack:
    image: plugins/slack
    channel: dev
+   when:
+     status: [ success, failure ]

遇到了问题?

我们非常乐意帮助您解决遇到的问题。 您可以先搜索对应文档,查看一些常见的问题。 您还可以地在 discourse 和其他开发者一起交流。

这个网页有没有错误? 请让我们知道 或编辑 这个页面