使用gogs,drone搭建自动部署
使用gogs,drone搭建自动部署
使用gogs,drone,docker搭建自动部署测试环境
Gogs是一个使用go语言开发的自助git服务,支持所有平台
Docker是使用go开发的开源容器引擎
Drone是一个基于容器技术的持续集成平台。每个构建都在一个临时的Docker容器中执行,使开发人员能够完全控制其构建环境并保证隔离。drone易于安装和使用,其目标是替代jenkins
本文所实现的的功能为当你push代码到gogs时,自动更新您测试环境的二进制文件并重启,实现自动部署(以go开发api服务为例,测试环境为ubuntu)
整个流程为:
- push code
- drone搭建临时容器拉取最新代码编译,在临时容器内通过scp拷贝编译好的二进制文件至测试服务器,然后通过ssh控制测试环境应用服务重启(supervisorctl)
步骤(ubuntu)
默认已经安装好gogs和docker,以及使用supervisor部署应用服务(可选为其他部署方式)
- 安装docker
具体安装步骤可见官网文档 - 安装gogs
官网安装文档(需FQ,也可自行搜索相关安装文档) - 安装drone(v0.5)
通过docker安装下载drone镜像
docker pull drone/drone:0.5
启动drone server
docker run -d \
-e DRONE_GOGS=true \
-e DRONE_GOGS_URL=http://127.0.0.1:3000 \ //gogs服务器地址
-e DRONE_SECRET=... \
-e DRONE_OPEN=true \
-v /var/lib/drone:/var/lib/drone \
-p 80:8000 \
--restart=always \
--name=drone \
drone/drone:0.5该命令启动的是一个以sqlite做为存储数据库,可选配mysql,postgres可根据自己情况进型配置,见文档
drone启动成功,可以通过网页访问,使用gogs账号登录,找到项目开启管理。启动drone agent
docker run -d \
-e DRONE_SERVER=ws://172.17.0.1/ws/broker \ //server 地址
-e DRONE_SECRET=... \ //与server一致
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=always \
--name=drone-agent \
drone/drone:0.5 agent
- 生成定制golang镜像(在.drone.yml配置置该镜像作为构建镜像)
- pull一个base镜像
docker pull goang:latest 可选择版本 - 定制镜像
- 创建并启动golang容器
docker run --ti golang:latest /bin/bash - 生成ssh公钥,并设置ssh免密登录测试服务器
容器内:- 执行ssh-keygen -t rsa
- 会在$HOME/.ssh目录下生成id_rsa和id_rsa.pub
- 将id_rsa.pub通过scp拷贝至测试服务器
测试服务器: - 在home目录下建立.ssh文件夹
- 并cat id_rsa.pub >> .ssh/authorized_keys
- chmod 600 .ssh/authorized_keys
ssh免密密登录已配置好
下载自己项目需要的依赖包 go get ...(官方golang镜像的GOPATH为/go)
准备好之后退出容器,并把在容器里面的修改保存为一个新的镜像
如:docker commit [容器id] golang:dev
- 创建并启动golang容器
- pull一个base镜像
在项目根路径添加.drone.yml文件
配置示例:workspace:
base: /root/go
path: src/projectname pipeline:
build:
image: golang:dev //指定构建镜像
environment:
- GOPATH=/go:/root/go
- SSH_ARGS=-p 22 -o StrictHostKeyChecking=no(设置第一次登录时不需要输入yes)
- SCP_ARGS=-P 22 -o StrictHostKeyChecking=no
- BUILD_NAME=buildname
- APP_NAME=appname
- TEST_SERVER=root@172.17.0.1
- RUN_PATH=/data/go/project(配置自己测试环境应用保存运行地址)
commands:
- go build -o $BUILD_NAME
- eval $(ssh-agent -s)
- ssh-add /root/.ssh/id_rsa
- scp $SCP_ARGS "$BUILD_NAME" "$TEST_SERVER":"$RUN_PATH"/"$BUILD_NAME"_"$(date '+%Y%m%d')"_"$(git rev-parse HEAD| cut -c1-10)" //拷贝文件
- ssh $SSH_ARGS "$TEST_SERVER" "ln -s -f $RUN_PATH/$BUILD_NAME\_$(date '+%Y%m%d')_$(git rev-parse HEAD| cut -c1-10) $RUN_PATH/$BUILD_NAME && supervisorctl restart $APP_NAME" //重启,利用软连接实现备份- workspace: 工作路径,根据如上配置,会把你的项目克隆到 /root/go/projectname, 且$PWD=/root/go/projectname
- image: 指定构建镜像
- environment: 构建临时容器的环境变量,相当于 docker run -e .....
- commands: 在容器内shell上执行的命令
上面配置文件中设置了两个GOPATH是因为在之前的测试中,如果我设置
base/root
GOPATH=/go
会把之前镜像下载的依赖包给清空了,不知是哪里配错了还是什么原因,暂时只找到设置另个GOPATH的方法来解决编写好.drone.yml后加入仓库push代码便会自动构建部署了
使用gogs,drone搭建自动部署的更多相关文章
- 记录使用gogs,drone搭建自动部署测试环境
使用gogs,drone,docker搭建自动部署测试环境 Gogs是一个使用go语言开发的自助git服务,支持所有平台 Docker是使用go开发的开源容器引擎 Drone是一个基于容器技术的持续集 ...
- 基于Gogs+Drone搭建的私有CI/CD平台
请移步 基于Gogs+Drone搭建的私有CI/CD平台
- Gogs+Drone搭建CI/CD平台
Gogs 是由 Go 语言编写的 Git 服务器,由中国人主导开发的一款开源项目,搭建方便并且拥有完善的中文文档,配合 Drone 可以实现持续集成/持续部署.本文介绍如何通过 Docker 搭建 G ...
- Jenkins+Maven+SVN搭建自动部署、自动测试环境
.打开http://10.3.15.78:8080/jenkins/,第一次进入里面没有数据,我们需要创建job,我们这有2个项目,需要创建2个job.http://10.3.34.163:9890/ ...
- 利用Git搭建自动部署的Laravel环境 - 钟晨宇的博客 - CSDN博客
目标:服务器上搭建Laravel环境,本地使用IDE进行开发,使用Homestead做本地调试环境,代码提交后自动部署到服务器Root目录下. 下面是整个流程的示意图: 1. 准备工作,搭建LNMP ...
- 【小白向】基于Docker使用Gogs,Drone以及drone-runner-docker的自动化部署
Gogs是基于Go语言编写的可以替代gitlab的代码托管平台,它没有gitlab那么庞大且不需要占用大量资源,对小型服务器相对于比较友好,我们甚至可以使用树莓派搭建. 服务器配置: * 操作系统:C ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)
前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)
前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...
- 使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建
使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建 目录 使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建 使用jenkins自动 ...
随机推荐
- 使用mvn生成webapp失败,尚未找到原因
执行命令: mvn archetype:create -DgroupId=com.jd.ads.test -DartifactId=testTools -DarchetypeArtifactId=ma ...
- PHP导出数据库方法
(1)定义一个db_dump函数如下: <?PHP function db_dump($host,$user,$pwd,$db) { $mysqlconlink = mysql_connect( ...
- 1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识
要看懂设计模式,你需要懂类图(Class Diagram),也需要懂一点对象图(Object Diagram),下面介绍一些UML的必要知识,以便你学习设计模式. 属性.操作 下图简单介绍类的属性和操 ...
- 十五天精通WCF——终结篇 那些你需要注意的坑
终于一路走来,到了本系列的最后一篇了,这一篇也没什么好说的,整体知识框架已经在前面的系列文章中讲完了,wcf的配置众多,如果 不加一些指定配置,你可能会遇到一些灾难性的后果,快来一睹为快吧. 一: 第 ...
- CentOS 6.5 生产环境编译安装LNMP
一.环境准备 1.操作系统安装:CentOS 6.5 64位最小化安装. 2.配置好IP.DNS.网关.主机名 3.配置防火墙,开启80.3306端口 vim /etc/sysconfig/iptab ...
- php 页面传递数组元素
前台页面的表单中添加多个input元素,如下: <form action="a.php"> <input type="text" name= ...
- SQL Server调优系列进阶篇(如何维护数据库索引)
前言 上一篇我们研究了如何利用索引在数据库里面调优,简要的介绍了索引的原理,更重要的分析了如何选择索引以及索引的利弊项,有兴趣的可以点击查看. 本篇延续上一篇的内容,继续分析索引这块,侧重索引项的日常 ...
- dotNET使用DRPC远程调用运行在Storm上的Topology
Distributed RPC(DRPC)是Storm构建在Thrift协议上的RPC的实现,DRPC使得你可以通过多种语言远程的使用Storm集群的计算能力.DRPC并非Storm的基础特性,但它确 ...
- win7下硬盘安装ubuntu
首先还是分区,在计算机上右键--管理--磁盘管理.装Ubuntu分配的硬盘大小最好是(20G以上)不要太小,这里请注意,Ubuntu和Windows文件系统完全不同,所以我们划好要给Ubuntu的分区 ...
- 烂泥:mysql帮助命令使用说明
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在安装.管理和使用mysql过程中,你是不是需要记忆很多的mysql命令.而且对于新手来说,很不多的命令不知道该如何应用,对于老手来说很多命令时间长了忘 ...