使用drone和gogs搭建自己的CI/CD系统

5次阅读

共计 2991 个字符,预计需要花费 8 分钟才能阅读完成。

drone 是一个基于容器的本地持续交付平台,和 Jenkins 是差不多的,然后配合轻量级的 gogs 来作为 git 管理,都是基于 golang 开发的很符合我的需求,我们来把它们结合作为一个完整的 CI、CD 平台。
首先我们要先安装 docker,上次的篇幅我们已经说过了我就不赘述了。
需要的东西有:linux,docker,docker-compose,drone,gogs,git 等。
安装 gogs 和 drone
配合荣锋亮大哥的 yml 文件和 docker-compose 我们可以很容易安装他们:
version: ‘3’
services:
drone-server:
image: drone/drone:latest
ports:
– “8080:80”
– 8843:443
– 9000
volumes:
– ./drone:/var/lib/drone/
– /var/run/docker.sock:/var/run/docker.sock
environment:
– DRONE_OPEN=true
– DRONE_SERVER_HOST=drone-server
– DRONE_DEBUG=true
– DRONE_GIT_ALWAYS_AUTH=false
– DRONE_GOGS=true
– DRONE_GOGS_SKIP_VERIFY=false
– DRONE_GOGS_SERVER=http://gogs:3000
– DRONE_PROVIDER=gogs
– DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
– DRONE_DATABASE_DRIVER=sqlite3
– DRONE_SERVER_PROTO=http
– DRONE_RPC_SECRET=ALQU2M0KdptXUdTPKcEw
– DRONE_SECRET=ALQU2M0KdptXUdTPKcEw
gogs:
image: gogs/gogs:latest
ports:
– “10022:22”
– “3000:3000”
volumes:
– ./data/gogs:/data
depends_on:
– mysql
mysql:
image: mysql:5.7.16
volumes:
– ./gogs/mysql:/var/lib/mysql
– /var/run/docker.sock:/var/run/docker.sock
ports:
– 3308:3306
command: –character-set-server=utf8mb4 –collation-server=utf8mb4_unicode_ci
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: gogs
MYSQL_USER: gogs
MYSQL_PASSWORD: pass
TZ: Asia/Shanghai
drone-agent:
image: drone/agent:latest
depends_on:
– drone-server
environment:
– DRONE_RPC_SERVER=http://drone-server
– DRONE_RPC_SECRET=ALQU2M0KdptXUdTPKcEw
– DRONE_DEBUG=true
– DOCKER_HOST=tcp://docker-bind:2375
– DRONE_SERVER=drone-server:9000
– DRONE_SECRET=ALQU2M0KdptXUdTPKcEw
– DRONE_MAX_PROCS=5
docker-bind:
image: docker:dind
privileged: true
# command: –storage-driver=overlay
我们创建一个存放 docker-compose.yml 文件的目录比如就叫 gogs,然后我们把这些 yml 保存成 docker-compose.yml,然后执行 docker-compose 来安装:
$ docker-compose up -d
配合 yml 文件,我们就安装好了 drone-server 和 drone-agent 还有 gogs,然后我们用浏览器打开 http://localhost:3000/ 来进入 gogs 并初始化它。

域名和应用 URL 记得一样接着我们创建一个管理员用户,然后其他的都默认,点击立即安装完成。

初始化成功之后我们可以在 gogs 里边创建一个仓库,然后登陆 drone。
drone
打开浏览器输入 http://localhost/ 直接进入 drone,密码是 gogs 的你的刚刚的账户和密码。

我们会看到一个刚刚创建的仓库,激活它!
激活之后,我们回到 gogs 那边,仓库的设置里边的 webhook 应该已经配置好了

我们可以测试 web hook,如果没有问题的话,应该会提示成功。
上传源码
测试没有问题之后,我们初始化我们的代码文件夹为 git 仓库,然后 push 到 gogos 上边

然后为你的仓库加上.drone.yml 配置文件,drone-server 会自动读取这个文件进行 CI、CD 操作等。以下这个是我们的示例文件
kind: pipeline
name: demo

steps:
– name: build
image: golang:1.11.4
commands:
– pwd
– go version
– go build .
– go test demo/util

# – name: frontend
# image: node:6
# commands:
# – npm install
# – npm test

– name: publish
image: plugins/docker:latest
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: example/demo
tags: latest

– name: deploy
image: appleboy/drone-ssh
pull: true
settings:
host: example.me
user: root
key:
from_secret: deploy_key
script:
– cd /data
– mkdir app/
– cd /data/app
– docker rmi -f example/demo
– echo “login docker”
– echo “login success, pulling…”
– docker pull example/demo:latest
– echo “image running”
– docker run -p 8088:8088 -d example/demo
– echo “run success”

我们首先进行简单的 golang build 和 test 操作然后根据 Dockerfile 文件把我们的程序构建成 docker 镜像,接着上传到 docker hub 中,然后通过 drone-ssh 插件部署这个镜像。
开始构建
有了配置文件之后,推送代码我们就可以去 drone 查看构建进度:

drone 的设置
在进入 drone 的时候,选择一个项目我们可以进行一些必要的设置,比如配置 secrets,定时任务和徽章等等。
比如配置文件需要的密钥,用户名和密码,一些环境变量都可以在 secrets 设置,构建状态徽章可以在你的项目 README.md 文件加上去。

项目加上徽章:

示例代码,本文完。

正文完
 0