使用gogs,drone,docker搭建自动部署测试环境

Gogs是一个使用go语言开发的自助git服务,支持所有平台

Docker是使用go开发的开源容器引擎

Drone是一个基于容器技术的持续集成平台。每个构建都在一个临时的Docker容器中执行,使开发人员能够完全控制其构建环境并保证隔离。drone易于安装和使用,其目标是替代jenkins

本文所实现的的功能为当你push代码到gogs时,自动更新您测试环境的二进制文件并重启,实现自动部署(以go开发api服务为例,测试环境为ubuntu)

整个流程为:

  1. push code
  2. drone搭建临时容器拉取最新代码编译,在临时容器内通过scp拷贝编译好的二进制文件至测试服务器,然后通过ssh控制测试环境应用服务重启(supervisorctl)

步骤(ubuntu)

默认已经安装好gogs和docker,以及使用supervisor部署应用服务(可选为其他部署方式)

  1. 安装docker

    具体安装步骤可见官网文档

  2. 安装gogs

    官网安装文档(需翻墙,也可自行搜索相关安装文档)

  3. 安装drone(v0.5)

    通过docker安装

    1. 下载drone镜像
      docker pull drone/drone:0.5
    2. 启动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账号登录,找到项目开启管理。

    3. 启动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
  4. 生成定制golang镜像(在.drone.yml配置置该镜像作为构建镜像)

    1. pull一个base镜像

      docker pull goang:latest 可选择版本
    2. 定制镜像
      1. 创建并启动golang容器

        docker run --ti golang:latest /bin/bash

      2. 生成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

  5. 在项目根路径添加.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搭建自动部署测试环境的更多相关文章

  1. 使用gogs,drone搭建自动部署

    使用gogs,drone搭建自动部署 使用gogs,drone,docker搭建自动部署测试环境 Gogs是一个使用go语言开发的自助git服务,支持所有平台Docker是使用go开发的开源容器引擎D ...

  2. jenkins自动部署测试环境

    构建脚本如下: echo "当前目录":$(pwd)echo "当前时间":$(date +%Y-%m-%d_%H:%M)find ./ -type f -na ...

  3. python 实现自动部署测试环境

    预设条件 产品运行在Linux CentOS6 X64上 python3,Djanggo,Cherrypy安装好手动安装过程 登录服务器 检查是否有以前的版本的产品在运行,有,停掉 如果有原来的代码包 ...

  4. 基于Gogs+Drone搭建的私有CI/CD平台

    请移步 基于Gogs+Drone搭建的私有CI/CD平台

  5. jenkins+git+maven搭建自动化部署项目环境

    简介    折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.co ...

  6. docker-compose 搭建 Redis Sentinel 测试环境

    docker-compose 搭建 Redis Sentinel 测试环境 本文介绍如何使用 docker-compose 快速搭建一个 Redis Sentinel 测试环境.其中 Redis 集群 ...

  7. Jenkins+Maven+SVN搭建自动部署、自动测试环境

    .打开http://10.3.15.78:8080/jenkins/,第一次进入里面没有数据,我们需要创建job,我们这有2个项目,需要创建2个job.http://10.3.34.163:9890/ ...

  8. 利用Git搭建自动部署的Laravel环境 - 钟晨宇的博客 - CSDN博客

    目标:服务器上搭建Laravel环境,本地使用IDE进行开发,使用Homestead做本地调试环境,代码提交后自动部署到服务器Root目录下. 下面是整个流程的示意图:  1. 准备工作,搭建LNMP ...

  9. Gogs+Drone搭建CI/CD平台

    Gogs 是由 Go 语言编写的 Git 服务器,由中国人主导开发的一款开源项目,搭建方便并且拥有完善的中文文档,配合 Drone 可以实现持续集成/持续部署.本文介绍如何通过 Docker 搭建 G ...

随机推荐

  1. Java或Android开发中,去掉块注释格式化后每行出现的星号(*)的解决方案。(Eclipse)

    找到子项,在 Window->Prefrences->Java->Code Style->Formatter,点击New新建 Active profile,然后在Comment ...

  2. 全球最低功耗蓝牙单芯片DA14580的硬件架构和低功耗

    号称全球最低功耗蓝牙单芯片DA14580在可穿戴市场.健康医疗.ibeacon定位等市场得到广泛的应用,但是因为其较为封闭的技术/资料支持导致开发人员有较高的技术门槛,网络上也极少看到有关DA1458 ...

  3. Web应用程序系统的多用户权限控制设计及实现-项目架构【3】

    本章主要讲述Web权限管理系统的项目架构,及开发中需要的基本类和相关的CSS,JS文件. 1.1系统结构 本系统搭建开发工具为Visual Studio 2012,采用ASP.NET MVC 4.0技 ...

  4. windows 和 linux ssh互连

    从windows连接到linux: linux开启sshd服务即可,主要是windows的配置如下: 1.使用软件,putty可以直接使用 2.使用cmd控制台连接linux,安装SSH Secure ...

  5. (甲)PAT-1001

    1001. A+B Format (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B   Calculate a + b and output the sum ...

  6. Effective Java 38 Check parameters for validity

    For public methods, use the Javadoc @throws tag to document the exception that will be thrown if a r ...

  7. 详解Winform里面的缓存使用

    缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力.本文主要针对自己在Winform方面的缓存使用做一个引导性的介绍,希望大家能够从中了解一些缓存 ...

  8. MyCat 学习笔记 第十篇.数据分片 之 ER分片

    1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键 ...

  9. Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入

    本节主要内容:       1.实例化Spring容器示例    2.利用Spring容器创建JavaBean对象    3.如何控制Bean实例化    4.利用Spring实现bean属性sett ...

  10. python 小程序练习

    还有一些小bug 基本有 输入用户名密码 认证成功后显示欢迎信息 输出三次后锁定 # -*- coding:utf-8 -*- account_file=('C:\Users\guigu\Deskto ...