本文基于前文 如何搭建GitLab+Drone CI的持续集成环境 ,如果还没有搭建好Drone CI不妨先查阅此文把环境建好再回来品读本文。
在项目根目录创建 .drone.yml
文件
首先我们需要创建一个
.drone.yml
的配置文件放到项目的根目录来让Drone
帮我们完成一些编译-更新的动作。如下是一个简单的例子:
1 | pipeline: |
这个配置文件所做的动作很简单,Clone代码(被隐藏了,Drone会自动执行)然后进入
Git Clone
后的目录,然后根据指定的动作(Step Name
)一步一步往下执行,这里的话当然仅仅是使用了Docker镜像并执行npm install
安装项目所需的依赖以及npm run build
来编译静态文件。当然这里还可以加入npm test
来进行测试代码是否有问题。至于这个配置文件的语法的话,用的是yaml
的语法,跟Docker Compose
配置文件的语法是一样的。yaml
根据缩进来断句, 这点与Python是类似的。(写代码的时候记得备好游标卡尺,2333)
使用Plugins
Drone是一个开源项目,所以有很多开发者为Drone开发了很多很实用的插件,比如Email通知、SCP等等,你可以在Drone的插件市场找寻更多实用的插件。当然也可以在GitHub和DockerHub找寻更多有用的插件。(Drone官方的插件市场只收录了部分插件,因为没有集中的插件发布地址,所以部分小众需求的插件或许只能通过其他渠道搜寻得到了)需要在Drone中使用插件是一件再简单不过的事情,下面是例子:
1 | pipeline: |
上面的配置文件简单地使用了官方插件市场中推荐的SCP插件,更多用法可以查阅插件市场提供的文档。这里的配置文件也非常简单,主要使用了插件(其实也是一个Docker镜像)来自动地做一些体系化的动作。这里的话是把上面
npm run build
打包好的静态文件夹dist
发布到目标主机的指定目录下。因为是静态文件,甚至不用做重启HTTP服务器的动作就完成了代码发布的动作,是不是超简单!(小声地:Nodejs是世界上最好的语言!)
使用Secrets变量
众所周知,我们的
.drone.yml
文件是跟代码放在一起的,但是.drone.yml
文件中往往会存在一些敏感信息,直接明文写到配置文件上是极度不安全的!还好,智者先行,连我都能想到的问题,开发这个工具的大神早就想到并给出了解决方案,那就是使用Secrets环境变量!这个神奇的Secrets变量怎么设置呢?其实很简单,在Drone Web
对应的项目build
目录下,点击右上角就可以设置当前项目的Secrets变量啦!
如图所示,我们已经创建好名为
drone_rsa
,target
,source
以及username
的四个Secrets环境变量啦,那么怎么使用呢?使用也很简单,在.drone.yml
文件中加上secrets
标签即可,具体用法可以看下面的例子:(改写上面的例子)
1 | pipeline: |
如上配置,Drone就可以成功读取到刚刚设置的Secrets变量啦,是不是超简单!同理可以把
host
或其他步骤中的私密配置项都使用变量来增加安全性。
一个例子配置文件
上面已经分解地讲解了一个
.drone.yml
文件主要的几部分,下面是实战时间。下面是我在一个前端项目中使用的一个.drone.yml
配置文件,迫于保密重要信息已做打码处理(使用了Secrets变量):
1 | clone: |
这个配置文件主要工作流程是这样的:判断是否有
.git
缓存,如果没有则git clone
仓库,如果有则还原缓存,然后于远端进行同步;判断是否有node_modules
缓存,如果有则还原,如果没有则跳过;执行commands
里面的脚本;缓存指定目录(这里是.git
和node_modules
);SCP指定目录下的静态文件到服务器;钉钉通知代码更新结果。这里使用了cache
,主要缓存了.git
和node_modules
目录,缩短git clone
和npm install
的时间。这里还是用了when
标签来控制流程。当然还有的就是我们刚刚讲过的secrets
标签。
Happy Ending
本篇文章到这就全部结束了,感谢大家的阅读。希望大家能从这篇文章中得到帮助。如果你对这篇文章有任何意见或建议,都欢迎给我发送邮件,优质的文章离不开读者的反馈。