[小团队自动化] (一) Drone CI For Github —— 打造自己的CI/CD工作流

栏目: 数据库 · 发布时间: 7年前

内容简介:让我们一起开始实践在这里,我为
Drone是一种基于容器技术的持续交付系统。Drone使用简单的YAML配置文件(docker-compose的超集)来定义和执行 Docker 容器中的Pipelines。
Drone与流行的源代码管理系统无缝集成,包括GitHub,GitHub Enterprise,Bitbucket等。

Drone CI For Github

让我们一起开始实践 Drone 的部署和使用

准备工作

在这里,我为 Drone Server 使用的域名是 dronetest.yiranzai.top

了解Docker-compose

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。

写了一个小Demo帮助你更快了解Docker-compose

申请一个Github OAuth Application

Github OAuth Application是为了授权 Drone Server 读取你的 Github 信息。

参照我之前写的Demo 一张图搞定 Github Create an OAuth Application

记下生成的 Client IDClient Secret

编写docker-compose.yml

我们需要

  • drone-server (中央Drone服务器)
  • drone-agent (接收来自中央Drone服务器的指令以执行构建管道)
  • mysqldrone 默认的数据存储是 sqllite3 ,这里我们使用MySQL)
  • nginx (使用 nginx 来做对外的服务代理,不要让 drone-server 直接对外提供服务)

参考:

version: "3.7"
services:
  nginx:
    image: nginx:alpine
    container_name: drone_nginx
    ports:
      - "80:80"
    restart: always
    networks:
      - dronenet
  mysql:
    image: mysql:5.7
    restart: always
    container_name: drone_mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_DATABASE=drone
      - MYSQL_USER=drone
      - MYSQL_PASSWORD=drone_password
    networks:
      - dronenet
    volumes:
      - /path/to/conf/my.cnf:/etc/mysql/my.cnf:rw
      - /path/to/data:/var/lib/mysql/:rw
      - /path/to/logs:/var/log/mysql/:rw
  drone-server:
    image: drone/drone:1.0.0-rc.5 #不要用latest,latest并非稳定版本
    container_name: dronetest_server
    networks: 
      - dronenet
    volumes:
      - ${DRONE_DATA}:/var/lib/drone/:rw
      - /var/run/docker.sock:/var/run/docker.sock:rw
    restart: always
    environment:
      - DRONE_DEBUG=true
      - DRONE_DATABASE_DATASOURCE=drone:drone_password@tcp(drone_mysql:3306)/drone?parseTime=true   #mysql配置,要与上边 mysql 容器中的配置一致
      - DRONE_DATABASE_DRIVER=mysql
      - DRONE_GITHUB_SERVER=https://github.com
      - DRONE_GITHUB_CLIENT_ID=${Your-Github-Client-Id}  #Github Client ID
      - DRONE_GITHUB_CLIENT_SECRET=${Your-Github-Client-Secret} #Github Client Secret
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RPC_SECRET=YOU_KEY_ALQU2M0KdptXUdTPKcEw  #RPC秘钥
      - DRONE_SERVER_PROTO=http			#这个配置决定了你激活时仓库中的webhook地址的proto
      - DRONE_SERVER_HOST=dronetest.yiranzai.top
      - DRONE_USER_CREATE=username:yiranzai,admin:true  #管理员账号,一般是你github用户名
  drone-agent:
    image: drone/agent:1.0.0-rc.5
    container_name: dronetest_agent
    restart: always
    networks: 
      - dronenet
    depends_on:
      - drone-server  #依赖drone_server,并在其后启动
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:rw
    environment:
      - DRONE_RPC_SERVER=http://drone_server	#drone用的http请求包,url一定要写上协议才能支持
      - DRONE_RPC_SECRET=YOU_KEY_ALQU2M0KdptXUdTPKcEw  #RPC秘钥,要与drone_server中的一致
      - DRONE_DEBUG=true
networks:
  dronenet:
复制代码

运行服务

创建容器和网络

$ docker-compose up -d  
Creating drone_mysql      ... done
Creating dronetest_server ... done
Creating drone_nginx      ... done
Creating dronetest_agent  ... done
$ docker-compose ps
      Name                   Command             State          Ports       
----------------------------------------------------------------------------
drone_mysql        docker-entrypoint.sh mysqld   Up      3306/tcp, 33060/tcp
drone_nginx        nginx -g daemon off;          Up      0.0.0.0:80->80/tcp 
dronetest_agent    /bin/drone-agent              Up                         
dronetest_server   /bin/drone-server             Up      443/tcp, 80/tcp
复制代码

编写 nginx 配置文件

$ docker-compose exec nginx ash
# vim /etc/nginx/conf.d/drone.conf
server {
    listen       80;
    server_name dronetest.yiranzai.top;
    location / {
        proxy_pass http://dronetest_server;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}
# nginx -s reload
复制代码

访问服务

先有一个OAuth验证,然后会开始同步你所有的仓库。

[小团队自动化] (一) Drone CI For Github —— 打造自己的CI/CD工作流

写到这里, Drone CI for Github 就已经搭建成功了,是不是很开心,是不是很满足?结束了吗?并没有!

我们还要测试一下 Drone Server ,测试服务的可用性。

说干就干,开搞。

验证服务

没有经过实践的项目不是可用的项目

创建空仓库,并同步到 Drone 激活

仓库怎么创建就不再赘述,在这里,我创建一个名为 dronetest 的仓库,并回到 Drone 同步仓库

  1. 同步仓库
[小团队自动化] (一) Drone CI For Github —— 打造自己的CI/CD工作流
  1. 激活仓库

激活以后,检查一下GIthub仓库的Webhooks

[小团队自动化] (一) Drone CI For Github —— 打造自己的CI/CD工作流
[小团队自动化] (一) Drone CI For Github —— 打造自己的CI/CD工作流
  1. 添加 Secrets

    在这里我创建了两个Secret name: yiranzai word: Hello World!

[小团队自动化] (一) Drone CI For Github —— 打造自己的CI/CD工作流

编写 .drone.yml

这里由于服务器配置是敏感信息,我们需要用到 Secret 来存储

事先创建好登陆部署服务器所需要的 host username rsa port 以及要部署的路径 deploy_path

参考

[小团队自动化] (一) Drone CI For Github —— 打造自己的CI/CD工作流
---
kind: pipeline
name: drone

workspace:
  base: /app
  path: git/drone

steps:
  - name: build
    image: node:alpine
    volumes:
      - name: webroot
        path: /wwwroot
    commands:
      - /bin/sh bash.sh
    environment:
      host:
        from_secret: host
      port:
        from_secret: port
      abc: abctest
  - name: deploy
    image: appleboy/drone-scp
    when:
      status:
        - success
    settings:
      host:
        from_secret: host
      port:
        from_secret: port
      key:
        from_secret: rsa
      username:
        from_secret: username
      target:
        from_secret: deploy_path
      source: ./*

volumes:
  - name: webroot
    host:
      path: /opt
  - name: cache
    host:
      path: /tmp/cache

trigger:
  branch:
    - master
  event:
    - push
复制代码

编写 bash.sh 打印变量

echo $host

echo $abc

echo $port
复制代码

推到仓库,查看效果

  1. push to repo
git init
git add .;git commit -m 'init test'
git remote add origin git@github.com:yiranzai/dronetest.git
git push -u origin master
复制代码
  1. 查看 DroneACTIVITY FEED

如果成功就会如下图所示

[小团队自动化] (一) Drone CI For Github —— 打造自己的CI/CD工作流

如果失败,会有错误信息

这里是由于我用的 node 镜像是 node:alpine ,没有 bash

[小团队自动化] (一) Drone CI For Github —— 打造自己的CI/CD工作流
  1. 去服务器检查一下

    看到 bash.sh.drone.yml 都被上传到这里(只是测试,不是真的让你这么干)

$ pwd
/home/www
$ ll -a
total 40
drwx------  4 www  www  4096 Feb 20 04:23 .
drwxr-xr-x. 4 root root 4096 Feb 20 03:55 ..
-rw-------  1 www  www    61 Feb 19 03:00 .bash_history
-rw-r--r--  1 www  www    18 Oct 30 13:07 .bash_logout
-rw-r--r--  1 www  www   193 Oct 30 13:07 .bash_profile
-rw-r--r--  1 www  www   231 Oct 30 13:07 .bashrc
-rw-r--r--  1 www  www    35 Feb 20 04:23 bash.sh
-rw-r--r--  1 www  www   812 Feb 20 04:23 .drone.yml
drwxr-xr-x  8 www  www  4096 Feb 20 04:23 .git
drwxr-xr-x  2 www  www  4096 Feb 19 02:40 .ssh
复制代码

总结

Drone CI for Github的部署到此就真的结束了,一路走来,踩了不少坑,Drone的文档你慢慢看了以后就会发现有多烂,烂到心累想哭,许多在Demo中出现的变量在参考手册中找不到,完全不知道什么含义,只能靠瞎猜和摸索。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Agile Web Application Development with Yii 1.1 and PHP5

Agile Web Application Development with Yii 1.1 and PHP5

Jeffrey Winesett / Packt Publishing / 2010-08-27

In order to understand the framework in the context of a real-world application, we need to build something that will more closely resemble the types of applications web developers actually have to bu......一起来看看 《Agile Web Application Development with Yii 1.1 and PHP5》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具