CI/CD - Drone 五分钟成为终极工具人

很久以前就想自己建个drone来实现CI/CD
原因是在公司里面通常都已经建好了,不然就是有MIS/SRE会去负责
当万年老N是没机会在公司负责这个项目的
而且用Drone还要学Docker,碰到就觉得好累
最近好不容易挤出时间来完成这个项目,没想到是蛮简单的
这样又可以在履历上面多一个技能可以跟面试官嘴炮了

什麽是Drone

是一套用Go撰写的CI/CD工具,利用Docker部署Server或Runner
其他也有很多CI/CD工具,例如像是Jenkins

本次实验环境

  1. macOS+homebrew

  2. ngrok

    ngrok:
    一个reverse proxy服务,可以透过注册并在你本机启动并选择要对外的port後就可以得到一组对外的domain address
    
    brew install ngrok
    

3.drone+github
4.docker

实现步骤

启动ngrok

在你的termainl上启动ngrok

ngrok http 80

注册Github OAuth Apps

1.网页右上头像>Settings>Develop Settings>OAuth Apps
2.New OAuth Apps
3.内容填如图

https://ithelp.ithome.com.tw/upload/images/20211212/20118878QHcBDGWpQu.png

Homepage URL:你开ngrok後给你的Forwarding

注意!!!!!!!!
Authorization callback URL:Forwarding後面要加上 /login

4.新增完成,github页面别关,记住你的Client ID & Client secrets,接下来要写docker-compose.yaml会用到

Client ID:填入DRONE_GITHUB_CLIENT_ID
Client secrets:填入DRONE_GITHUB_CLIENT_SECRET

启动你的Docker Server&Runner + Pipeline Setting

  1. 写一个docker-compose.yaml
注意你的drone-server和drone-runner下的environment会不一样,port可以改
  drone-server:
    image: drone/drone:1
    container_name: drone-server
    ports:
      - 80:80
    volumes:
      - /var/lib/drone:/var/lib/drone/
    restart: always
    environment:
      - DRONE_SERVER_HOST=4d9b-106-105-96-97.ngrok.io
      - DRONE_SERVER_PROTO=https
      - DRONE_RPC_SECRET=0387ee7de7e33a542182462a07a475ee
      - DRONE_GITHUB_CLIENT_ID=10b0f7ccd02334293794
      - DRONE_GITHUB_CLIENT_SECRET=522839c9aaee53dd52095bedf7e16e2bb3786e99

  drone-runner:
    image: drone/drone-runner-docker:1
    container_name: drone-runner
    restart: always
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_RPC_HOST=drone-server
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_SECRET=0387ee7de7e33a542182462a07a475ee
      - DRONE_RUNNER_CAPACITY=2
  1. DRONE_RPC_SECRET如何得到?
在termianl上输入
openssl rand -hex 16
  1. 写一个.drone.yml
---
kind: pipeline
name: testing

steps:
- name: backend
  image: golang:1.15
  commands:
    - go build
    - go test
  1. Project layout

https://ithelp.ithome.com.tw/upload/images/20211212/2011887896uiGAaPmn.png

  1. 在terminal上输入docker-compose up
在这个阶段你没有的image会自动pulling

https://ithelp.ithome.com.tw/upload/images/20211212/20118878xuniF37wrC.png

拜访你的drone网页後台

  1. 在浏览器网址列上输入你的ngrok forwarding,例如
9ac8-106-105-96-97.ngrok.io
  1. 等待sync
  2. 到你要做CI/CD的project里面点选activate repository
  3. commit & push project
  4. 就会看到他自动在执行了,会有log,成功!!!!

https://ithelp.ithome.com.tw/upload/images/20211212/201188789cL5kkXQNY.png

遇到的问题

  1. 重启ngrok後,webhook没有自动触发

    原因是你在第一次完成整个流程後,你的project webhook会自动被设定好
    第二次要使用的时候要进到你的project里面重新设定ip address
    不过这是实验才会有这个问题,通常实际上主机的ip address是固定的
    
    1.到github.com/yourID/yourProject
    2.选择setting>webhook>edit
    3.payload URL 贴上你重启後的ngrok address
    4. update webhook
    

    https://ithelp.ithome.com.tw/upload/images/20211212/20118878lSJLRZ9yoH.png

参考资料

感恩网路大神,里面的设定档都是参考来的,还有些设定要去仔细研读

总结

标题说是五分钟有点耸动拉XD
会了之後是五分钟就可以启动没错
不过在这之前大概花了一天认真看过中间的步骤跟实作
有一些config是范例,比较机敏的东西填上去是怕看到的人不知道怎麽填写设定
不过那些hex或是router都是用完就丢的,还有不重要的repo
实际上真的在做的时候要小心这些东西不要泄漏出去,不然就...


<<:  2021/12/12 更新

>>:  Java学习之路07---阵列

想办法找找市场区隔吧!

什麽是市场区隔? 最早看到市场区隔这个词的时候 一直不知道算是名词还是动词 後来多看几次文章後慢慢了...

[必学] iPhone、iPad 和 iPod 的 AirPlay 失灵的解决方法

AirPlay 自 iOS 5 开始在 iPhone 和 iPad 推出後,一直以简单有用着称。Ai...

laravel 8部署到免费的Heroku

必备条件 以及安装 PHP、Composer和 Heroku CLI。 Heroku 使用者帐户 像...

[Day 1] 主角总是最後登场的 (前端篇)

其实只是拖延症点到满等的我,说是主角其实只是拖延症发作 有看过某些YT频道的应该有听过这段话 什麽样...

资安学习路上-Linux基础与Web基础2

网站+网页绪论 浏览器介绍(推Firefox跟Edge) 上图取自台科大资安社课教材 浏览网页发生的...