Drone学习总结
Drone实现原理
Drone中测试执行过程
Cloud Drone测试
-
配置OAuth
生成Client ID和Client Secret
配置Application信息
-
使用github账户登录cloud.drone.io,确认授权
-
激活需要与drone集成的库
登录进入cloud.drone.io之后,在Repositories列表中选择需要与Drone集成的库。
-
在github中配置某个库的webhooks
在第3步激活某个项目之后,在项目的settings下面就会自动添加webhooks信息,如下图所示。注意的是,drone默认是80端口,所以如果修改了端口还需要手动在hook url中添加端口。
进入到某个webhook,可以在页面的最后面看到Deliver的历史记录,如下图所示。可以通过右上角按钮重新推送进行测试。
Drone本地测试
在本地搭建的过程中,尝试过docker-compose和直接通过drone.deb的方式安装。drone.deb包现在比较古老,是0.3.0版本,所以界面并不好看,而且有许多不足。最终按照如下的docker-compose配置文件成功启动了drone。
按照官方的方法install,会提示ssl验证不过,所以放弃官方的版本。
现把docker-compose的文件直接贴出来。
version: '3'
services:
drone-server:
container_name: drone-server
image: drone/drone:1.0.0-rc.5
ports:
- 8080:80
volumes:
- db-data:/var/lib/drone/
restart: always
environment:
# - DRONE_OPEN=false
- DRONE_SERVER_HOST=123.xxxxxx # tunnel hostname
- DRONE_GITHUB_SERVER=https://github.com
- DRONE_ADMIN=xxxxxxxxx
- DRONE_GITHUB_CLIENT_ID=xxxxx
- DRONE_GITHUB_CLIENT_SECRET=xxxxx
- DRONE_SERVER_PROTO=http # tunnel adds https on top
- DRONE_RPC_SECRET=xxxxxxxx
drone-agent:
container_name: drone-agent
image: drone/agent:1.0.0-rc.5
command: agent
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_SERVER=http://drone-server
- DRONE_RPC_SECRET=xxxxxxxxx
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME="local"
- DRONE_DEBUG=true
volumes:
db-data:
Drone的特性说明
端口修改
端口修改的时候不能将本地也修改为其他端口,只能将本地端口映射到需要对外开放的端口,如上述的配置:
ports: - 8080:80
Matrix
-
使用matrix的时候,不能使用steps的方式,而是使用
pipeline
的方式。 -
在matrix中只支持
key-value
的形式,并且value只能是一行代码。比如要执行多个shell语句的时候,则需要用&&
符号将命令链接,如下所示:
Secret
在Drone中有两种使用secret的情况,一种是在使用steps
的情况,一种是使用pipeline
的情况。
-
使用
steps
情况kind: pipeline name: deploy steps: - name: hello-world image: docker environment: TEST_PWD: from_secret: TEST_PWD envs: [ TEST_PWD ] commands: - echo "hello world" - echo ${TEST_PWD} - echo $TEST_PWD - echo $$TEST_PWD - date -R
-
使用
pipeline
情况secrets: [ FTP_PWD ] commands: - echo ${FTP_PWD} - echo $FTP_PWD
故障执行
在官方文档(https://0-8-0.docs.drone.io/zh/getting-started/)上的方式通过slack插件实现,但是这个方式是将工作流日志发给设置的地址。但是如果我们想在成功或者失败之后都执行某些口令,这种方式不适合。可以通过在commands下面添加set +e
实现上述需求。
commands:
- set +e