Drone是一款持续集成(Continuous integration,CI)软件,可以帮助开发人员随着代码更改的提交自动进行一系列工作,包括静态分析、打包编译以及分发或部署等工作。
Drone采用go编写,具有较高的执行效率、较低的资源占用,相较于传统的Jenkins以及Jetbrains的TeamCity来说更为轻量。
Drone大致可以分为两部分,一部分为Server,用于提供主体用户界面及Drone本身的服务,另一部分为Runner,具体执行CI的各个任务。按照Drone文档的说法,在能够使用Docker Runner的情况下应该尽量使用Docker Runner来确保隔离性;但如果项目的构建或相关工作无法在容器中完成,也可以使用Exec Runner或SSH Runner,它们会使用主机的默认shell执行CI任务,因此仅适合于确保安全、受信任的构建。
在Drone中,CI的任务大多数可以通过流水线(pipeline)完成,下方为一个自动构建docker映像、推送registry并自动部署的流水线文件示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
kind: pipeline name: default steps: - name: docker # 使用docker插件,先构建映像,然后推送到registry上 image: plugins/docker settings: repo: registry.your-domain.com/your-image registry: registry.your-domain.com - name: ssh deploy # 使用ssh插件,在部署服务器上使用新的docker映像重新部署容器 image: appleboy/drone-ssh settings: host: from_secret: ssh_host username: from_secret: ssh_user password: from_secret: ssh_pass script: - echo 'stopping container' - docker stop your-container - echo 'removing container' - docker rm your-container - echo 'starting container' - docker run -d --name your-container -p your_port:your_port registry.your-domain.com/your-image - echo 'docker deployment completed' |
注意上方配置文件中,可以使用from_secret来使用Drone提供的密文存储来避免敏感信息被记录在流水线配置文件中。
Comments