基于 gitlab-ci 构建 golang 项目 CI 环境

在 github 上托管 go 开源项目,CI 使用 travis 的服务感受很方便,几乎不须要额外的设置,可是涉及到公司的项目,经过 gitlab-ci 来跑 golang 项目的 CI,须要一点技巧。git

思路大体是这样:github

  1. 建立项目在 GOPATH 中的目录的 symbolic link ,指向 gitlab-runner 在该项目上执行 CI 时的工做目录
  2. 切换到这个连接目录,执行每一个 stage 的任务

具体的 .gitlab-ci.yaml 文件内容以下:golang

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_PATH

stages:
  - build
  - test
  - release

build:
  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

这里注意两个问题gitlab

  1. ln命令必定要加上 -f选项覆盖以前建立的link文件,避免报错退出CI。
  2. 本项目 vendor 目录里的代码已经提交到远程仓库中。

ref:ui

相关文章
相关标签/搜索