gitlab ci从入门到放弃

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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需要执行的命令.