OneDev Pipeline 简介

350 阅读3分钟

OneDev 从 7.0 版本开始引入了 Pipeline 的概念。简单来说,一个 Pipeline 对应于 CI 任务依赖图的一次执行。当任务运行时(无论是手动运行还是时间触发自动运行),其所处的依赖图就会执行。而同一个依赖图的执行可以包含多个任务的运行。

创建一个 Pipeline

以账号 demo/demo 登录到 OneDev 示例站点,并访问示例项目的 CI spec 定义页面,可以看到任务定义如下:

v2-6d1b2ee035b44c0ff56d4ad44a70303e_1440w.jpg

这里定义了一个 test 任务来编译和测试我们的 app,然后将该 app 发布为制品,以便后续部署时使用。deploy 任务如下通过依赖 test 任务获取其发布的 app 制品,并进行部署。

v2-6a19324e02141f89d4ab20f6659cc88b_1440w.jpg

现在运行 test 任务,OneDev 将生成相应的构建并显示其详情。因为任务的运行触发了其所在的依赖图的执行,OneDev 同时创建了一个 pipeline将当前构建包含在其中。可通过当前构建的 pipeline 标签页查看该 pipeline:

v2-ba5baa34ae7592ab96654cb550e80fe9_1440w.jpg

注意:必须具有仓库代码读权限才能查看 pipeline 标签页。

Pipeline 要点

Pipeline 有两个基本要点:

  1. 从某个 pipeline 触发的构建仍然属于该 pipeline,无论该构建是从 pipeline 页面手动触发,还是由 pipeline 中的其他构建通过触发器、依赖解析或后置动作自动触发。
  2. 对某个特定 pipeline,同一个任务在相同参数的情况下只能触发一次。如果任务没有定义参数,则只能触发一次。

我们来运行上面 pipeline 中的 deploy 任务来说明这两点。运行 deploy 任务后,通过其构建日志可以看到它使用了当前 pipeline 中已经运行过的 test 构建发布的app,而不会触发新的 test 构建:

v2-f63efbd06c0149ec3208a507ade9498e_1440w.jpg

同时通过 deploy 构建的 pipeline 标签页可知其所属的 pipeline 与之前 test 构建所属的pipeline 相同。

v2-bd338851c0417b10b764dcaa4df7e8b1_1440w.jpg

当 deploy 任务运行结束后,如果我们再次运行该任务,OneDev 会提示该构建已经被触发:

v2-6185f7ce0421dc314dffc203c93a96cd_1440w.jpg

相应的,如果在 pipeline 之外运行构建任务,OneDev将会产生新的 pipeline,并在其中运行 test 和 deploy 任务的新构建。我们来实际验证一下。访问 commits 页面,如下所示选择某个运行过 test 任务的 commit 并运行 deploy 任务:

v2-b3cb6904b1297939b6b925d344123ae4_1440w.jpg

可以看到产生了新的 deploy 构建, 切换到 pipeline 标签页, 也可以看到 deploy 任务的依赖解析产生了新的 test 构建(尽管 commit 里已有其他 test 构建存在):

v2-2d9d73bff2ecdab1e34f6d46a10c83e3_1440w.jpg

Pipeline 自动化

通过任务的触发器设置可以自动产生 pipeline。例如在示例项目的 CI spec 中,test 任务设置为在 master 分支有新的 commit 时自动运行:

v2-ec8688c23649da44017811c3e93b8dce_1440w.jpg

编辑 app.txt 文件并保存,可以看到 test 任务自动运行:

v2-069c0e9f94a0eb87717dfc32e26047e8_1440w.jpg

点击产生的 test 构建就会显示其详情。从详情页面即可访问相应的 pipeline。

如果我们希望 test 任务成功后自动运行 deploy 任务,可以为 deploy 任务配置一个在依赖任务完成时自动运行的触发器如下所示:

v2-34cf3b1b6c4b9e52f52d1119806a4748_1440w.jpg

现在我们在另一个配置了该触发器的项目中进行测试,编辑文件 app.txt 并保存。查看新产生的 pipeline,可以看到 deploy 任务在 test 任务成功后会自动运行:

v2-d7e2f32eb9ab93f8ee4c43c20e32069d_1440w.jpg

或者也可以为 deploy 任务设置一个在 master 分支更新的情况下自动运行的触发器。这种情况下,当 master 分支有了新的 commit 时,test 和 deploy 任务都会被触发,但 deploy 任务会等待 test 任务执行完成再运行,如下所示:

v2-efdd48ddb3eda629f3eba22634693d90_1440w.jpg

好了,现在您应该对 OneDev 中 pipeline 如何工作有个大致的了解了,有任何问题欢迎提交工单。谢谢关注!