Gitlab CI/CD

 

一、目的

  • 自动打包服务, 减少人工干预,节省时间成本, 降低错误率
  • 自动执行单元测试, 给出覆盖和执行情况
  • 可拓展其他功能: 比如代码规范检查等

二、流程

 

 

 

三、关键设施构建方法

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

 

 

 

 

 

 

 

 

 

 

 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值