iT邦幫忙

0

CI/CD - Drone 五分鐘成為終極工具人

  • 分享至 

  • xImage
  •  

很久以前就想自己建個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
實際上真的在做的時候要小心這些東西不要洩漏出去,不然就...


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言