服务器
在阿里云学生优惠中领取了一个免费7天的服务器。
github中添加OAUTH密钥
部署Drone之前在github中添加一个OAuth登录密钥,Drone使用OAuth方式登录。
1、打开setting -> Developer settings -> OAuth apps 添加一个新的oauth app
记住clint_id 和 secret 后面要用
其中
- homepage url为drone server的地址
- authorization callback url 为github oauth登录成功后的回调地址
编写dokcer-compose.yml文件‘
此文件用于编排生成运行容器(前提是服务器中安装了docker)
version: '3.9'
# 创建自定义网络
networks:
drone:
name: drone
driver: bridge
services:
# 数据库服务
db:
image: postgres:latest
container_name: drone_db
restart: always
networks:
- drone # 加入到drone网络
ports:
- '7931:5432'
environment:
- POSTGRES_USER=drone # PGSQL默认用户
- POSTGRES_PASSWORD=drone # PGSQL默认密码
- POSTGRES_DB=drone # PGSQL默认数据库
volumes:
- /volumes/drone/db:/var/lib/postgresql/data
# Drone Server 服务
server:
image: drone/drone:2.8.0 # 目前drone最新版本为 2.8.0
container_name: drone_server
restart: always
networks:
- drone # 加入到drone网络
ports:
- '8888:80'
environment:
- DRONE_SERVER_PROTO=http # 访问协议,创建webHooks和重定向
- DRONE_SERVER_HOST=47.115.223.63:8888 # 主机名称,创建webHooks和重定向
- DRONE_RPC_SECRET=e1ad8a7f3dbc68ca9c21bcc949335009 # 与 drone runner 通讯的密钥
- DRONE_USER_CREATE=username:tlf,admin:true # 管理员账户
- DRONE_DATABASE_DRIVER=postgres # 数据库类型
- DRONE_DATABASE_DATASOURCE=postgres://drone:drone@db/drone?sslmode=disable # 数据库连接
- DRONE_GIT_ALWAYS_AUTH=true # 使用 oauth 身份验证信息拉取代码
- DRONE_GITHUB_CLIENT_ID=5922eead7512d27158c3 #上面申请的clientId
- DRONE_GITHUB_CLIENT_SECRET=6911358fca7f451c22c7ab6a1c08864ebfc83f43 #github client secret
- TZ=Asia/Shanghai
volumes:
- /volumes/drone/server:/data
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- db
# Drone Docker Runner
runner:
image: drone/drone-runner-docker:1.8.0 # 目前drone-runner-docker最新版本为 1.8.0
container_name: drone_runner
restart: always
networks:
- drone # 加入到drone网络
ports:
- '7930:3000'
environment:
- DRONE_RUNNER_NAME=docker-runner
- DRONE_RUNNER_CAPACITY=10 # 限制runner可执行的并发管道数量
- DRONE_RPC_PROTO=http # 访问drone server 协议
- DRONE_RPC_HOST=47.115.223.63:8888 # 访问drone server 服务器地址
- DRONE_RPC_SECRET=e1ad8a7f3dbc68ca9c21bcc949335009 # 与 drone server 通讯的密钥
- DRONE_UI_USERNAME=tlf # Drone Runner 的 UI 用户账号
- DRONE_UI_PASSWORD=tlf # Drone Runner 的 UI 用户密码
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
depends_on:
- server
- DRONE_RPC_SECRET 是drone server与runner通信的密钥,必须一致。
- drone server :主要负责展示和管理自动部署的项目
- drone runner: 负责执行操作,执行时会轮询server来确定执行的操作。
- 使用docker-compose up -d 命令来运行响应的容器。
此时相关容器以及运行起来。
2.访问docker server 的地址 http://127.0.0.1 会跳转到github进行oauth授权然后再跳转到login进行drone登录
3.进入drone页面
此页面已经是我测试部署成功的页面了。
4.激活仓库
点开未激活的仓库
进行激活并设置一些东西
- Protected : 此属性是设置 是否要验证
配置文件(.drone.yml)
中的签名,开启后签名验证错误则不允许构建 - timeout 是设置构建任务执行的超时时间。
- Configuration 是设置配置文件文件,默认为 .drone.yml。 这个一般不需要改动。
编写 .doron.yml文件
此文件定义当github项目提交时,触发webhook发送消息后,drone自动化部署执行的操作。(放在项目的根目录中)
kind: pipeline # 定义一个管道
type: docker # 当前管道的类型
name: test # 当前管道的名称
steps: # 定义管道的执行步骤
- name: test # 步骤名称
image: node:latest # 当前步骤使用的镜像
commands: # 当前步骤执行的命令
- echo 测试drone执行
drone会根据step中的操作一步一步的执行。
稍微复杂一点的.drone.yml文件
kind: pipeline
name: 测试版
steps:
#git镜像
- name: tlf
image: alpine/git
commands:
- git checkout origin/tlf -B tlf
- name: docker
image: plugins/docker #编译镜像
volumes: #将容器中目录挂载到宿主机
- name: docker
path: /var/run/docker.sock
settings:
repo:
registry:
dockerfile: Dockerfile --编译生成镜像时执行操作
username:
from_secret: docker_username
password:
from_secret: docker_password
- name: notify #通知镜像
image: drillster/drone-email
settings:
host: sm
port:
username:
password:
from_secret: email_password
from:
recipients: [ ]
when:
status: [success, failure]
volumes: #定义流水线挂载目录
- name: docker
host:
path: /var/run/docker.sock
trigger: #管道执行触发条件
branch:
- tlf
推送代码到github相关仓库触发自动化部署
drone执行相关操作,部署成功。