sqlite笔录下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代码便会自动构建部署了
网站地图xml地图