大数跨境
0
0

搭建和使用self-hosted drone CI/CD服务器

搭建和使用self-hosted drone CI/CD服务器 DataHub数据流通
2016-06-24
1
导读:CI/CD(持续集成与持续发布)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化


CI/CD(持续集成与持续发布)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。


CI/CD最主要的价值在于减少重复的过程,例如代码编译、数据库集成、测试、审查、部署及反馈。通过自动化的持续集成可以将这些重复的动作都变成自动化的,无需太多人工干预,让人们的时间更多的投入到动脑筋的、更高价值的事情上。


下面就来介绍DataFoundry团队基于drone进行的CI/CD实践:

 

一、安装Docker

使用以下命令在Ubuntu上安装最新版本的Docker:

curl -sSL https://get.docker.com | sudo sh


安装过程结束后,可执行下面命令验证安装结果。如果看到输出docker start/running就表示安装成功:

sudo service docker status


Docker安装成功后,创建Docker属组,将当前用户ubuntu加入Docker属组:

sudo groupadd docker

sudo usermod -aG docker ubuntu


二、为drone注册github OAuth

进入github,找到下图对应位置,点击Settings:




进入以下页面,点击OAuth applications:



点击developerapplications中的register a new application,进入以下页面进行drone的配置:



其中,Application name输入drone,Homepage url输入http://ip:port/authorize,Authorization callback url一定要使用http://ip:port/authorize,否则后面drone登录时会报错。


这一步完成后,我们会获得Client ID和ClientSecret,这两项会在drone的启动配置文件中使用到。


三、为drone配置数据库

Drone支持多种数据库,在这里我们使用mysql。我们使用的是aws的RDS。在aws上创建数据库后,得到数据库的连接地址,数据库地址也将在drone的启动配置文件中使用到。


四、创建drone的启动配置文件

在ubunru系统中,使用以下命令创建drone的启动配置文件dronerc:

sudo mkdir /etc/drone

sudo vi dronerc


配置以下内容:

DATABASE_DRIVER=mysql

DATABASE_CONFIG=

REMOTE_DRIVER=github

REMOTE_CONFIG=https://github.com?client_id=${client_id}&client_secret=${client_secret}

将client_id与client_secret替换为前面步骤中获取到的值。这里要注意,数据库配置中一定不能使用引号,否则会报错。


五、启动drone

我们是以容器的方式来启动drone,使用以下命令:

sudo docker run \

--volume /var/lib/drone:/var/lib/drone \

--volume /var/run/docker.sock:/var/run/docker.sock \

--env-file /etc/drone/dronerc \

--restart=always \

--publish=80:8000 \

--detach=true \

--name=drone \

drone/drone:0.4.2


目前,drone的最新稳定版本为0.4.2,/etc/drone/dronerc为上一步中的启动配置文件,这里我们要挂载宿主机的/var/run/docker.sock文件。

 

启动后,使用docker logs <container-id>查看日志,正确的日志输出应当如下所示:



六、登录drone,enable 要进行CI/CD的项目:

登录http://ip:port,点击login进行登录,在此过程中,drone会根据github中配置的OAuth将项目显示在available repositories中:



选中要进行CI/CD的项目,点击activate now,项目会显示在active repositories中,同时,drone会自动为activate的项目加上webhook,通过这个webhook,每一次代码变更,drone都会拉取改动分支的代码进行持续集成。

                                              

七、为项目配置drone.yml文件

drone.yml文件用来定义整个CI/CD过程,drone通过寻找项目中的drone.yml来自动执行CI/CD。以下为我们某个项目的drone.yml文件:

compose:

  database:

    image: registry.dataos.io/library/mysql

    environment:

      - MYSQL_ROOT_PASSWORD=1234

      - MYSQL_DATABASE=test

      - MYSQL_USER=test

      - MYSQL_PASSWORD=1234

build:

  image: golang

  branch: develop

  environment:

    - MYSQL_PORT_3306_TCP_ADDR=127.0.0.1

    - MYSQL_PORT_3306_TCP_PORT=3306

    - MYSQL_ENV_MYSQL_DATABASE=test

    - MYSQL_ENV_MYSQL_USER=root

    - MYSQL_ENV_MYSQL_PASSWORD=1234

    - MYSQL_CONFIG_DONT_UPGRADE_TABLES=yes

  commands:

    - mkdir -p /drone/src/github.com/asiainfoLDP

    - cp -R /drone/src/github.com/cherry4477/datahub_subscriptions /drone/src/github.com/asiainfoLDP/

    - export GOPATH=/drone

    - go get github.com/tools/godep

    - cd /drone/src/github.com/asiainfoLDP/datahub_subscriptions

    - $GOPATH/bin/godep restore

    - _db/initdb_v1.0.sh

    - go test -v -cover ./....

    - go build

   

publish:

  docker:

    environment:

      - DOCKER_LAUNCH_DEBUG=true

    registry: registry.dataos.io

    #mirror: registry.dataos.io

    #image_name: registry.dataos.io/datahubdevelop/sub

    repo: datahubdevelop/sub

    username: username

    password: password  

    email: mengjing@asiainfo.com

    #file: Dockerfile

    Tag: $$COMMIT

    when:

      branch: develop

      event: push

     

deploy:

  ssh:

    host: hostip

    user: mengjing

    port: 22

    commands:

      - ssh dev.dataos.io

      - oc login host --username=username --password=password


Drone所有的插件都以docker形式运行,例如克隆代码会拉取drone-git插件的镜像,然后启动git容器,在容器中执行克隆代码的操作。以上配置中,每部分都涉及到drone的插件,所以在执行每部分的时候都会去拉取相应的镜像,启动相应的容器执行我们定义的步骤。


Compose部分使用了我们自定义的镜像来启动测试需要连接的数据库,此时,drone为自动起一个mysql容器,这里需要提到的一点是:所有配置文件中定义的容器都将被启动在同一个namespace下,这意味着所有容器将共用同一个网络空间,所以以上配置中为应用传递数据库连接信息时,host是可以直接使用127.0.0.1的。


Publish部分,我们将构建出来的镜像推送到我们的私有仓库上,deploy部分可以使用ssh插件登录到任意主机上进行部署。在CI/CD结束后,所有进行测试的容器都将被销毁,我们的ci服务器上只有drone服务器这个容器而已。在页面或者通过docker logs –f <drone容器id>查看执行日志。

 

至此,self-hosted drone CI/CD服务器搭建完毕,后续我们还会推出drone的k8s插件的使用,敬请期待!


DataHub 阳光下的数据流通平台
长按识别二维码,加关注


【声明】内容源于网络
0
0
DataHub数据流通
DataHub 为数据交易的双方提供便利的交易通道,为独立开发方、第三方数据平台提供能力展示渠道,是数据链接的基础设施和中介管理机构,是安全、公正的交易平台。
内容 79
粉丝 0
DataHub数据流通 DataHub 为数据交易的双方提供便利的交易通道,为独立开发方、第三方数据平台提供能力展示渠道,是数据链接的基础设施和中介管理机构,是安全、公正的交易平台。
总阅读23
粉丝0
内容79