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

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文件加上去。

项目加上徽章:

示例代码,本文完。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理