一、目的
- 自动打包服务, 减少人工干预,节省时间成本, 降低错误率
- 自动执行单元测试, 给出覆盖和执行情况
- 可拓展其他功能: 比如代码规范检查等
二、流程
三、关键设施构建方法
3.1 gitlab runner
本地安装:
# 1 添加仓库 curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash # 2 安装最新版本runner sudo apt-get install gitlab-runner # 3 注册runner到项目 # 打开项目设置,中CI/CD部分 # 点击runner部分,找到"Set up a specific Runner manually"给出的url和token # url和token用于接下来的命令交互,executor类型选择docker sudo gitlab-runner register # 4 启动 # 仅以debug模式 # 这里面的token是注册之后生成的,在/etc/gitlab-runner/config.toml下。 gitlab-runner --debug run-single --url https://git-pd.megvii-inc.com/ --token wS184zYf3hnHo8dzC59x --executor docker |
注意pull_policy = ["if-not-present"], 这项需要手动配置, 表示如果本地有docker镜像就用本地的, 就节省了拉取镜像的时间
concurrent = 1 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "build" url = "https://git-pd.megvii-inc.com/" token = "E8Dk7q4sGXbcx2JUK41U" executor = "docker" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure] [runners.docker] tls_verify = false image = "ubuntu:megvii4go" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache"] pull_policy = ["if-not-present"] shm_size = 0 |
3.2 executor(任务执行者)、docker镜像构建
这里我们选择docker内执行, 为了节省构建的时间, 我们基于ubuntu18.04构建了一个新的镜像
在其中添加了下列依赖, 节省了代码打包时间80%以上
- gcc
- wget
- curl
- make
- go
- 需要的go mod 依赖
可以在服务器上新建docker_build文件夹, 并将下列Dockerfile文件拷贝进去, 同时将pangu-devops的go.sum go.mod拷贝进去
后执行sudo docker build -t ubuntu:megvii4go ./ 即可自动构建一个新的docker镜像
FROM ubuntu:18.04 USER root RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak # 更改镜像为阿里镜像源 RUN echo "deb http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe" >> /etc/apt/sources.list RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe" >> /etc/apt/sources.list RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe" >> /etc/apt/sources.list RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe" >> /etc/apt/sources.list RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe" >> /etc/apt/sources.list RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe" >> /etc/apt/sources.list # 分隔符, 两套apt源 RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list # 更新apt RUN apt-get update # 安装gcc、make、wget、curl RUN apt-get install build-essential wget curl -y RUN gcc -v RUN make -v RUN curl -V RUN wget -V # go环境安装 RUN wget https://studygolang.com/dl/golang/go1.15.4.linux-amd64.tar.gz -O /go1.15.4.linux-amd64.tar.gz RUN tar -zxvf /go1.15.4.linux-amd64.tar.gz -C / ENV GOROOT /go ENV PATH $PATH:$GOROOT/bin RUN go version # go mod 下载 COPY go.mod / COPY go.sum / RUN go mod download |
3.3 gitlab CI/CD执行
.gitlab-ci.yml控制整个执行流程,
test_job_1: tags: - local script: - source /etc/profile - go version # go mod依赖下载, docker中已经集成了大部分, 这里防止go mod依赖有小的变动 - go mod download # 获取git提交信息 - GIT_COMMIT=`awk 'END {print $2}' .git/logs/refs/remotes/origin/dev` - echo $GIT_COMMIT - GIT_COMMIT_SHORT=${GIT_COMMIT:0:7} - echo $GIT_COMMIT_SHORT # 执行make指令 - make build-all-deb |
make build-all-deb命令根据运维代码中的Makefile来执行
四、链接地址
4.1 项目相关
Docker镜像构建: Dockerfile
FROM ubuntu:18.04
USER root
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak
# 更改镜像为阿里镜像源
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe" >> /etc/apt/sources.list
# 分隔符, 两套apt源
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
# 更新apt
RUN apt-get update
# 安装gcc、make、wget、curl
RUN apt-get install build-essential wget curl -y
RUN gcc -v
RUN make -v
RUN curl -V
RUN wget -V
# go环境安装
RUN wget https://studygolang.com/dl/golang/go1.15.4.linux-amd64.tar.gz -O /go1.15.4.linux-amd64.tar.gz
RUN tar -zxvf /go1.15.4.linux-amd64.tar.gz -C /
ENV GOROOT /go
ENV PATH $PATH:$GOROOT/bin
RUN go version
# go mod 下载
COPY go.mod /
COPY go.sum /
RUN go mod download
go.mod
4.2 教程连接
制作docker镜像 https://www.jianshu.com/p/8c40e2d78e1b
gitlab CI/CD配置过程 https://www.xuxusheng.com/post/%E4%BD%BF%E7%94%A8Docker%E9%83%A8%E7%BD%B2GitLab-CI-Runner