跳到主要内容

工作流

一个管道至少有一个工作流。工作流是一组按顺序执行的步骤,使用相同的工作空间,该工作空间是一个包含仓库和来自前面步骤生成的所有数据的共享文件夹。

如果在 .woodpecker.yaml 中只有一个配置,Woodpecker 将创建一个包含单个工作流的管道。

通过将配置放置在默认名为 .woodpecker/ 的文件夹中,Woodpecker 将创建一个包含多个工作流的管道,每个工作流以其定义的文件命名。只会使用 .yml.yaml 文件,任何子文件夹中的文件(如 .woodpecker/sub-folder/test.yaml)将被忽略。

您也可以在项目设置中设置一些自定义路径,如 .my-ci/pipelines/ 而不是 .woodpecker/

使用工作流的好处

  • 更快的检查/测试反馈,工作流不必完全运行就能将检查状态推送到远程
  • 更好地组织管道的各个关注点,为测试、检查、构建和部署使用一个工作流
  • 利用更多代理来加速整个管道的执行

工作流定义示例

注意

请注意,文件只在同一工作流的步骤之间共享(参见文件更改是增量的)。这意味着您无法在 deploy 工作流中访问来自 build 工作流的工件。 如果您仍然需要在工作流之间传递工件,您需要使用一些存储插件(例如将文件存储在 Amazon S3 存储桶中的插件)。

.woodpecker/
├── build.yaml
├── deploy.yaml
├── lint.yaml
└── test.yaml
.woodpecker/build.yaml
steps:
- name: build
image: debian:stable-slim
commands:
- echo building
- sleep 5
.woodpecker/deploy.yaml
steps:
- name: deploy
image: debian:stable-slim
commands:
- echo deploying

depends_on:
- lint
- build
- test
.woodpecker/test.yaml
steps:
- name: test
image: debian:stable-slim
commands:
- echo testing
- sleep 5

depends_on:
- build
.woodpecker/lint.yaml
steps:
- name: lint
image: debian:stable-slim
commands:
- echo linting
- sleep 5

工作流执行顺序

在上面的示例中,执行顺序如下:

  1. buildlint 工作流将并行启动,因为它们没有任何依赖关系
  2. test 工作流将在 build 工作流完成后启动
  3. deploy 工作流将在所有其他工作流(lintbuildtest)完成后启动

可视化

flowchart TD
A[开始] --> B[build]
A --> C[lint]
B --> D[test]
B --> E[deploy]
C --> E
D --> E
E --> F[结束]

工作流状态

工作流可以有以下状态之一:

  • 挂起:工作流正在等待执行
  • 运行中:工作流正在执行
  • 成功:工作流成功完成
  • 失败:工作流执行失败
  • 已杀死:工作流被手动终止
  • 已跳过:由于条件不满足,工作流被跳过

工作流依赖关系

您可以使用 depends_on 属性定义工作流之间的依赖关系。这允许您创建复杂的执行图,其中某些工作流必须在其他工作流之前完成。

depends_on:
- lint
- build
- test

工作流过滤器

与步骤类似,您也可以为工作流定义 when 条件:

.woodpecker/deploy.yaml
when:
- event: push
branch: main

steps:
- name: deploy
image: debian:stable-slim
commands:
- echo deploying

depends_on:
- lint
- build
- test

这个 deploy 工作流只会在推送到 main 分支时执行。