iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Modern Web

Let's Go! 解剖Go server開發到部署的過程系列 第 14

day 14 - drone 的go-test & golangci-lint

自己的產出自己負責!每次交付專案之前我都會想到這句話, 是不是該再檢查一下/images/emoticon/emoticon37.gif

程式碼已經成功的build完之後, 為了確保程式碼有經過基本的檢查, 可以導入golangci-lint, 它會針對程式碼做基本的品質把關, 像是參數沒有接、function或參數未被使用...等都可以幫忙檢查出來!詳細檢查項目可以參考golangci-lint

我們團隊有自建的drone可以使用, 每次commit都會透過drone自動跑golangci-lint, 本機要跑的話只要在專案底下執行指令就可以透過docker run image 檢查:

  • 指令
docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.30.0-alpine \
sh -c "golangci-lint run" -v
  • 執行結果
-> % docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.30.0-alpine \
sh -c "golangci-lint run" -v
helper.go:33:6: `HandlerPanicRecover` is unused (deadcode)
func HandlerPanicRecover(err *error) {
     ^
model/limit.go:11:32: S1019: should use make(map[string]int) instead (gosimple)
        result = make(map[string]int, 0)
                                      ^

不過我沒有自己架設過drone, 就來練習一下架設drone的過程吧
要使用到的工具有github帳號, ngrok, drone

  1. 先註冊 ngrok
    https://i.imgur.com/JNRQ6Oc.png
  • install ngrok

    -> % brew install ngrok
    Updating Homebrew...
    ==> Auto-updated Homebrew!
    Updated 1 tap (homebrew/core).
    ==> New Formulae
    (... 省略)
    ######################################################################## 100.0%
    Warning: No checksum defined for cask 'ngrok', skipping verification.
    ==> Installing Cask ngrok
    ==> Linking Binary 'ngrok' to '/usr/local/bin/ngrok'
    ?  ngrok was successfully installed!
    
  • 使用 ngrok 啟動一個外部可以使用的網址

    ngrok http 80
    

    啟動後的Forwarding就是之後設定的drone網址
    https://i.imgur.com/IqtVm4M.png

  1. 按照官網安裝 drone
  • 可以直接執行 pull image

    docker pull drone/drone:2
    
  • github 到 Developer Settings 綁定Oauth App(使用ngrok產生的網址)
    https://i.imgur.com/3wTaCR7.png

  • 透過 docker-compose 啟動 drone server, 參數要帶入對應的github資料

    version: '2'
    
    services:
      drone:
        image: drone/drone:2
        container_name: drone
        ports:
          - 80:80
        volumes:
          - /var/lib/drone:/var/lib/drone/
        restart: always
        environment:
          - DRONE_SERVER_HOST={{DRONE_SERVER_HOST}}
          - DRONE_SERVER_PROTO=http
          - DRONE_RPC_SECRET={{DRONE_RPC_SECRET}}
          - DRONE_GITHUB_CLIENT_ID={{DRONE_GITHUB_CLIENT_ID}}
          - DRONE_GITHUB_CLIENT_SECRET={{DRONE_GITHUB_CLIENT_SECRET}}
    
      drone-runner:
        image: drone/drone-runner-docker:1
        container_name: drone-runner
        restart: always
        depends_on:
          - drone
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
        environment:
          - DRONE_RPC_HOST=drone
          - DRONE_RPC_PROTO=http
          - DRONE_RPC_SECRET={{DRONE_RPC_SECRET}}
          - DRONE_RUNNER_CAPACITY=2
    
    
  1. 連到ngrok網址, 確認綁定狀況:
    https://i.imgur.com/9Uf7Xas.png

  2. github repo 綁定 Webhooks(使用ngrok產生的網址)
    https://i.imgur.com/PmvQvxU.png

  3. 都設定好之後, 推一個commit上去測試drone build
    https://i.imgur.com/jrWnstm.png

  • drone上面會顯示執行結果
    https://i.imgur.com/xt4XG2f.png

  • lint 也會提示要調整的部分
    https://i.imgur.com/70l3JSe.png

綁定在drone上面做檢查可以確保每個commit都有經過基本的品質驗證,
很方便又能避免忘記跑golangci-lint~

參考資料


上一篇
day 13 - go mod & vendor 簡介
下一篇
day 15 - 從執行時間開始優化
系列文
Let's Go! 解剖Go server開發到部署的過程30

尚未有邦友留言

立即登入留言