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

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

内容简介:让我们一起开始实践在这里,我为
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中出现的变量在参考手册中找不到,完全不知道什么含义,只能靠瞎猜和摸索。


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

查看所有标签

猜你喜欢:

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

The Little MLer

The Little MLer

Matthias Felleisen、Daniel P. Friedman、Duane Bibby、Robin Milner / The MIT Press / 1998-2-19 / USD 34.00

The book, written in the style of The Little Schemer, introduces instructors, students, and practicioners to type-directed functional programming. It covers basic types, quickly moves into datatypes, ......一起来看看 《The Little MLer》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具