..

gitlab ci从入门到放弃

我们组要做持续集成,需要调研gitlab的ci。这里来写一下记录下这个学习的过程。gitlab需要像github上那些开源项目一样,展示自己的编译情况和测试情况,就是build status badge icon,需要在README.md文件中加入markdown连接

![build](http://baochai:7201/plat/hello/badges/master/build.svg)
![coverage](http://baochai:7201/plat/hello/badges/master/coverage.svg)

然后在项目的主页就能看到下面的图标了 iconf 这个还是没有生成测试覆盖的服务,看到测试覆盖率.再看一下一个基本的.gitlab-ci.yml文件样子

variables:
  project_name: hello
  bin_name: sayhello
before_script:
  - export GOPATH=/deployment/GoProjects
  - export GOROOT=/deployment/ci/go;
  - export PATH=$PATH:$GOROOT/bin;
  - echo $GOPATH
stages:
  - test
  - pre
  - build
  - deploy

# 调整目录结构
setenv:
  stage: pre
  script:
    - ls -al
    - rm -rf ${GOPATH}/src/github.com/hellojukay/${project_name}
    - mkdir -p ${GOPATH}/src/github.com/hellojukay/${project_name}
    - cp -rf ./* ${GOPATH}/src/github.com/hellojukay/${project_name}

# 执行测试用例
test:
  stage: test
  script:
    - cd ${GOPATH}/src/github.com/hellojukay/${project_name}
    - go test -v -cover -race ./...

# 执行部署脚本
deploy:
  stage: deploy
  script:
    - cd ${GOPATH}/src/github.com/hellojukay/${project_name}
    - echo $(pwd)
    - nohup ./sayhello 2>&1 >> /dev/null  &
    
# 编译打包
package:
  stage: build
  script:
    - cd ${GOPATH}/src/github.com/hellojukay/${project_name}
    - echo $(pwd)
    - ls -al
    - go build -o ${bin_name}

是的gitlab-ci是yaml个是的文件。如果是使用vs code编写这样ci文件,可以安装相应的lint插件,帮助你检查你的ci文件是否有错误。再来讲一讲上面的ci文件的内容的具体含义吧.variables是用来的定义全局变量,这个ci文件中你都能使用. before_script这个是执行你的job之前一定会执行的命令,他们是按照顺序执行的,是的,这个设置的环境变量,在job里面也能获取到值.stages定义的是执行的阶段,如果没有定义stage,那么所有的job都会按照你定义顺序执行,如果定义了stages,stages会依次执行。一个stage会包含多个job,他们的执行顺序是定义的顺序。如果说有一个job不属于任何stage,那么这个job就不会被执行.我们在来看一下每个job。这里package就是一个job,package里面的stage就是说明当前job属于的执行步骤,script就是当前job需要执行的命令.