-
Notifications
You must be signed in to change notification settings - Fork 0
58 搭建CD工具drone
Jinxin Chen edited this page Dec 11, 2019
·
1 revision
Drone是一个建立在容器技术上的持续交付系统。只需要一个简单的YAML配置文件(docker-compose的超集),就可以在Docker容器中定义和执行pipeline。
Drone需要配合git源代码管理工具运行,目前支持的工具如下:
- GitHub
- GitLab
- Gitea
- Gogs
- Bitbucket Cloud
- Bitbucket Server
- Coding
目前最新版本为 0.8,可以使用一个 docker-compose 文件来启动 drone,示例如下:
version: '2'
services:
drone-server:
image: drone/drone:0.8
ports:
- 8002:8000
- 9000
volumes:
- /var/lib/drone:/var/lib/drone/
restart: always
environment:
- DRONE_OPEN=true
- DRONE_HOST=http://localhost:8000
- DRONE_ADMIN=supperxin
- DRONE_GITEA=true
- DRONE_GITEA_URL=http://gitea:8001
- DRONE_SECRET=drone-workshop
drone-agent:
image: drone/agent:0.8
command: agent
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_SERVER=drone-server:9000
- DRONE_SECRET=drone-workshop
- DOCKER_API_VERSION=1.24
运行如下命令,就可以通过 http://ip:8002 访问drone首页了。
docker-compose up -d
参数解释:
- DRONE_OPEN=true,启用开放注册,这样通过 git 源代码管理认证之后的用户会自动注册到drone中
- DRONE_HOST=http://localhost:8000,drone的网页访问地址
- DRONE_ADMIN=supperxin,管理员账号名称
- DRONE_GITEA=true,使用gitea作为源代码管理
- DRONE_GITEA_URL=http://gitea:8001,gitea的地址
- DRONE_SECRET=drone-workshop,drone server和agent通信的私钥
- DRONE_SERVER=drone-server:9000,drone server地址
- DOCKER_API_VERSION=1.24,定义docker api的版本,如果不定义则可能会出现错误:client is newer than server (client API version: 1.26, server API version: 1.24)
drone搭建好之后,就可以让repository集成CD了,步骤如下:
- 在repository根目录下添加文件 .drone.yml:
pipeline:
test:
image: alpine
commands:
- ./test.sh
-
添加一个测试脚本 test.sh:
echo "hello drone!"
-
加上执行权限:
chmod +x test.sh
-
访问 drone server 首页并用 gitea 的账号(本例为supperxin)登录,如果账号名称为DRONE_ADMIN设定的值,则自动成为drone的admin。
-
点击右上角菜单 --> "Synchronize",会自动将账号有权限的repository同步过来。
-
打开需要持续交付的repository的开关,drone会自动添加webhook到gitea
-
将repository的修改提交,可以在drone这边看到pipeline的执行状况
图片:
可以通过两种方式部署项目:
- 通过pipeline将文件复制到server(下方deployfiles)
- 通过pipeline远程执行server上的部署脚本(下方runscript)
pipeline:
test:
image: alpine
commands:
- ./test.sh
deployfiles:
image: appleboy/drone-scp
host:
- ${server_ip}
port: 22
username: ${username}
password: ${password}
target: /home/deploy/
source:
- deploy.sh
when:
branch: master
status: [ success ]
runscript:
image: appleboy/drone-ssh
host: ${server_ip}
port: 22
username: ${username}
password: ${password}
target: /home/deploy/
command_timeout: 180
script:
- /home/deploy/deploy.sh
when:
branch: master
status: [ success ]
图片:
关于drone插件drone-scp和drone-ssh可以参考下面链接查看更多内容: