工作流部分定义了一系列步骤,包括代码构建,代码测试和代码部署。工作流根据各个步骤的定义位置按顺序执行。如果一个步骤返回了非 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
在上面的示例中,我们定义了两个工作流步骤,frontend
和 backend
。这两个步骤的名字可以是任意指定的。
构建步骤
构建步骤是工作流在 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
请注意,只有构建步骤可以定义命令,您不能使用插件(plugins)或者服务(services)来定义命令。
并行执行
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
在上面到例子中,frontend
和 backend
将并行执行。在这两组任务完成之前,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 和其他开发者一起交流。