很久以前就想自己建個drone來實現CI/CD
原因是在公司裡面通常都已經建好了,不然就是有MIS/SRE會去負責
當萬年老N是沒機會在公司負責這個項目的
而且用Drone還要學Docker,碰到就覺得好累
最近好不容易擠出時間來完成這個項目,沒想到是蠻簡單的這樣又可以在履歷上面多一個技能可以跟面試官嘴砲了
是一套用Go撰寫的CI/CD工具,利用Docker部署Server或Runner
其他也有很多CI/CD工具,例如像是Jenkins
macOS+homebrew
ngrok
ngrok:
一個reverse proxy服務,可以透過註冊並在你本機啟動並選擇要對外的port後就可以得到一組對外的domain address
brew install ngrok
3.drone+github
4.docker
在你的termainl上啟動ngrok
ngrok http 80
1.網頁右上頭像>Settings>Develop Settings>OAuth Apps
2.New OAuth Apps
3.內容填如圖
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
注意你的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
在termianl上輸入
openssl rand -hex 16
---
kind: pipeline
name: testing
steps:
- name: backend
image: golang:1.15
commands:
- go build
- go test
在這個階段你沒有的image會自動pulling
9ac8-106-105-96-97.ngrok.io
重啟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
感恩網路大神,裡面的設定檔都是參考來的,還有些設定要去仔細研讀
標題說是五分鐘有點聳動拉XD
會了之後是五分鐘就可以啟動沒錯
不過在這之前大概花了一天認真看過中間的步驟跟實作
有一些config是範例,比較機敏的東西填上去是怕看到的人不知道怎麼填寫設定
不過那些hex或是router都是用完就丟的,還有不重要的repo
實際上真的在做的時候要小心這些東西不要洩漏出去,不然就...