在Drone Web中启用对某个项目的支持
首先打开我们的Drone Web页面

并找到我们需要启用的项目并点击进入启用页面(如果找不到想要的项目或许需要点一下SYNC按钮同步项目列表)

点击启用,然后禁用Project webhooks,给Project settings全部勾上,Project visibility建议Internal(内部可见)级别即可,勾选完毕之后点击Save(保存)就OK啦。

当然,这些选项后续都是可以进行更改的,所以没必要在这浪费太多时间,让我们继续往下看。
第一个 .drone.yml
首先,我们需要给我们的项目根目录中加入一个非常简单易懂的名叫.drone.yml的配置文件,用于告诉Drone这个项目我们需要它协助(持续集成)。下面是一个用于前端项目的简单例子:
1 |
|
这个配置前两行是声明了一个名叫dev的pipeline,steps部分才是配置运行步骤的地方。这个配置文件中,我们使用了node官方的latest tag的镜像来打包我们的项目。Drone会根据node:latest镜像创建一个容器,并在容器中执行npm i命令以及npm run build命令。
很好,到此为止,我们已经学会了怎么书写一个简单的.drone.yml,如果你还想要接受更多挑战,请继续往下看。
进化版 .drone.yml
通过上面一个小节我们已经学会了怎么添加一个最基础的.drone.yml,但是我们实际项目中,一般还存在.env文件用于存储不同环境的变量,在Drone中我们要怎么做呢?把不同环境的.env文件都放进代码版本库里面吗?当然不,永远不要将.env.example以外的.env文件上传到代码版本库中!我们还有更好的解决方案 – Vault,下面我们将学习怎么使用Vault管理我们的密钥(变量)。
首先需要运维大大帮忙配置好Vault以及drone-vault,具体操作在此略过。
好的,我们已经拥有一个配置好的Vault并且把Drone与Vault通过drone-vault插件链接在一起,使得Drone可以读取到我们存储在Vault中的密钥。接下来,我们先在Vault中存储我们接下来在.drone.yml中将会使用到的密钥。对于Vault我们只是用户,所以我们直接在Vault Web页面中添加我们的密钥即可,一般使用k-v存储引擎来存储,那么我们首先来创建一个k-v引擎:

OK,我们已经创建好了k-v存储引擎。一个引擎下面还可以存在多个路径,所以我建议可以将引擎当作一个group来使用,同group的项目密钥可以存储到同一个引擎中。我们假设有一个叫example的项目需要用到username和password这两个配置项,然后有三个环境拥有不同的值,三个环境分别是:dev、staging、master,那么我们可以这样新建:

在Vault中新建了secrets之后,我们接下来要在.drone.yml中引入刚刚设置的secrets。在Drone中提供了一个secret的kind用于引入其他密钥存储引擎中的密钥,让我们分别引入这三个环境的变量:
1 |
|
配置文件一目了然,首先告诉Drone从Vault的your-group/example目录下取值,然后把取到的值以环境变量的形式注入到node容器中,然后配合sed替换指定的.env中的配置项。然后分成三个环境分别进行以上三步。
很好,我们学会了如何使用Vault来存储我们的密钥以及怎么从Drone中使用这些密钥。如果你还想要接受更多挑战,请继续往下看。
使用Volume缓存
因为大部分包管理仓库都架设在国外,所以我们国内要安装一个项目的依赖包的时候,往往需要耗费九牛二虎之力。而因为Drone的工作模式是每次自动打包都会重新创建一个容器,并且每次打包结束(打包成功或打包失败)都会将这个容器销毁,因此我们项目所需要的依赖包每次都要重新安装,耗时不说,还极有可能安装失败,简直就是受到身体以及内心上的双重打击。幸好,我们可以通过使用Volume来获得救赎。
使用过Docker的小伙伴肯定对Volume不陌生,而Drone中也提供了这一功能。我们可以将容器中的指定路径映射到宿主机上的指定路径中,这样就可以一次安装,持久有效了!
秉承着不要重复造轮子的原则,在这里我们使用Drone Plugin Market中提供的drillster/drone-volume-cache镜像,简单的使用如下:
1 |
|
这段配置文件工作流程是:首先创建一个名字叫cache的Volume,并映射到宿主机的/tmp/cache路径下。然后在build之前先尝试还原node_modules,如果没有缓存则跳过进入build步骤,之后会尝试重新缓存node_modules目录到cache volume(也就是宿主机的/tmp/cache中)。具体的缓存-还原过程可以去查看drillster/drone-volume-cache的源码噢!
更多用法
更多用法可以参考Drone的官方文档
Happy Ending
好记性不如烂笔头,看到这还没有开始写你的第一个.drone.yml文件?快去书写你的第一个.drone.yml并发现更多高级用法来解放自己的双手吧!Let’s create a wonderful world!