在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!