使用gogs,drone搭建自动部署

使用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
      官网安装文档(需FQ,也可自行搜索相关安装文档)
    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,docker搭建自动部署测试环境 Gogs是一个使用go语言开发的自助git服务,支持所有平台 Docker是使用go开发的开源容器引擎 Drone是一个基于容器技术的持续集 ...

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

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

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

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

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

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

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

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

  6. 【小白向】基于Docker使用Gogs,Drone以及drone-runner-docker的自动化部署

    Gogs是基于Go语言编写的可以替代gitlab的代码托管平台,它没有gitlab那么庞大且不需要占用大量资源,对小型服务器相对于比较友好,我们甚至可以使用树莓派搭建. 服务器配置: * 操作系统:C ...

  7. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

  8. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)

    前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...

  9. 使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建

    使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建 目录 使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建 使用jenkins自动 ...

随机推荐

  1. iOS开发之多线程技术——GCD篇

    本篇将从四个方面对iOS开发中GCD的使用进行详尽的讲解: 一.什么是GCD 二.我们为什么要用GCD技术 三.在实际开发中如何使用GCD更好的实现我们的需求 一.Synchronous & ...

  2. flashdevelop生成swc库

    flashdevelop没有直接支持生成swc的工程,但flashdevelop生成swc也比较方便,不用任何插件. swc库是由 flexsdk的compc.exe生成的,其实我们通过这个命令行也可 ...

  3. MVC数据库数据分页显示

    首先从数据库获取数据 using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...

  4. 6、后记:PMO项目管理 - PMO项目管理办公室

    PMO项目管理办公室的作用,按笔者所简化的理解,其作用就是将项目资源标准化.规范化.文档化.然后,根据实际的项目情况,对项目间的资源内容进行协调沟通和培训,让项目组能够更快更好的完成项目建设任务. 不 ...

  5. js平滑返回顶部代码

    随便找的一个,使用时直接调用gotoTop就行了,至于调速度之类的我没试,有兴趣的自己试试吧 注意:如果你想改变这个函数的名称千万不要忘了要同时改变第37行的那个gotoTop /** * JavaS ...

  6. [20140117]疑似checkpoint堵塞数据库连接

    注:这个说法是不成立的,问题已经解决,但是无法正确的定位到具体什么原因:[20140702]奇怪的应用程序超时 背景: 开发通过应用程序的日志发现间歇性的出现,数据库连接超时 原因: 只能大概猜测,没 ...

  7. 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式

    注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式 这个坑,必须要注意呀, 比如在用ListView的时候,如果在List_ ...

  8. 高仿一元云购IOS应用源码项目

    高仿一元云购IOS应用(高仿自一元云购安卓客户端) 本App因官方没有IOS客户端故开发,利用业务时间历时2个星期,终于开发完成,又因苹果的各大审核规则对此App的影响,又历时1个多月才终于成功上架, ...

  9. linux编程之内存映射

    一.概述                                                   内存映射是在调用进程的虚拟地址空间创建一个新的内存映射. 内存映射分为2种: 1.文件映射 ...

  10. namenode metadata 备份与恢复实验

    https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#dfsadmin -me ...