這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
在 github 上託管 go 開源項目,CI 使用 travis 的服務感覺很方便,幾乎不需要額外的設定,但是涉及到公司的項目,通過 gitlab-ci 來跑 golang 項目的 CI,需要一點技巧。
思路大致是這樣:
- 建立項目在 GOPATH 中的目錄的 symbolic link ,指向 gitlab-runner 在該項目上執行 CI 時的工作目錄
- 切換到這個連結目錄,執行每個 stage 的任務
具體的 .gitlab-ci.yaml 檔案內容如下:
before_script: - export GO_PROJECT_NAMESPACE="$GOPATH/src/gitexample.com/$CI_PROJECT_NAMESPACE" - echo $GO_PROJECT_NAMESPACE - mkdir -p $GO_PROJECT_NAMESPACE - ln -srf $(pwd) $GO_PROJECT_NAMESPACE - export GO_PROJECT_PATH="$GO_PROJECT_NAMESPACE/$CI_PROJECT_NAME" - echo $GO_PROJECT_PATH - cd $GO_PROJECT_PATHstages: - build - test - releasebuild: stage: build script: - go build test: stage: test script: - go test -v ./...release: stage: release script: - make goreleaser ...... when: on_success allow_failure: true only: - tags
這裡注意兩個問題
ln命令一定要加上 -f選項覆蓋之前建立的link檔案,避免報錯退出CI。
- 本項目 vendor 目錄裡的代碼已經提交到遠程倉庫中。
ref:
- GitLab CI Pipeline for Go ($24565) · Snippets · GitLab