Devops之实战部署gitlab ci持续构建

目录

一、前言

1、gitlab ci是什么

2、GitLab-Runner是什么

3、小结

二、部署gitlab-runner

1、Docker 安装 gitlab-runner

2、使用二进制文件

3、Linux安装gitlab-runner

三、向gitlab注册gitlab-runner

四、编写gitlab-ci.yml

1、gitlab-ci.yml参数

2、.gitlab-ci.yml文件示例


一、前言

1、gitlab ci是什么

GitLab CI 是GitLab内置的进行持续集成的工具,在代码仓库对应分支根目录下创建.gitlab-ci.yml 文件,并配置GitLab Runner后;可配置自动触发操作,即每次push代码的时候,gitlab将自动识别到.gitlab-ci.yml文件,使用Gitlab Runner执行该脚本完成ci过程,也可手动运行(生产环境下建议手动执行)

2、GitLab-Runner是什么

用来执行.gitlab-ci.yml 脚本的工具,需要在GitLab-CI里面注册,根据不同项目服务运行指定类型的gitlab runner
 

3、小结

gitlab ci流水线由两部分组成:1)首先部署gitlab-runner执行器并注册到gitlab;2)编写gitlab-ci.yml文件,配置构建流水线,并指定对应的gitlab-runner执行器

  • .gitlab-ci.yml  在仓库根目录创建此文件
  • gitlab-runner  在单个/多个主机环境运行runner执行器

二、部署gitlab-runner

GitLab CI 是GitLab内置的持续集成工具,只需要在对应分支代码仓库下根目录创建.gitlab-ci.yml 文件,配置指定GitLab Runner;可设置自动触发构建,即每次push代码的时候,gitlab将自动执行gitlab-ci.yml文件进行ci构建;tip,生产环境中,不建议自动触发构建,使用手动构建更好。

GitLab Runner 能安装在 GNU/Linux,、macOS、FreeBSD, 和 Windows上。安装方式有:

  • Docker / K8S / Helm
  • 二进制
  • rpm/deb packages.

ps:在公司生产环境中使用了docker和k8s的部署方式,方便快捷,具体用哪种需要自己评估

1、Docker 安装 gitlab-runner

gitlab-runner在 Docker 容器中运行,需要确保在容器重新启动时配置不会丢失,因此通过volume将配置映射到主机上存放,运行命令如下

  docker run -d --name gitlab-runner --restart always \
     -v /srv/gitlab-runner/config:/etc/gitlab-runner \
     -v /var/run/docker.sock:/var/run/docker.sock \
     gitlab/gitlab-runner:latest

Tips:使用docker运行的gitlab-runner在执行ci流程时,会提示docker权限不足,是因为gitlab runner是用gitlab-runner这个用户运行的;解决方法是修改用户权限

# 执行如下命令
usermod -aG docker gitlab-runner

2、使用二进制文件

# 根据对应的架构选定版本下载
# Linux x86-64
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64"

# Linux x86
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386"

# Linux arm
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm"

# Linux arm64
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm64"

# Linux s390x
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-s390x"

# Linux ppc64le
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-ppc64le"
   
# Linux x86-64 FIPS Compliant
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64-fips"

# 赋权
sudo chmod +x /usr/local/bin/gitlab-runner

# 创建运行用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

# 安装并做为服务运行
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

3、Linux安装gitlab-runner


三、向gitlab注册gitlab-runner

执行器的类型有docker+machine, docker-ssh+machine, kubernetes, docker, docker-ssh, shell, ssh, virtualbox, custom, parallels,具体区别及使用场景可看官方文档

# 注册命令
gitlab-runner register

# 这里用的是全局的runner(具体区别自己看官方文档),在gitlab管理面板->Runner,可以查看url和token,下面会用到

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):

http://gitlab.test.cn/ # 要注册到的gitlab地址

Please enter the gitlab-ci token for this runner:
S8AC783Za # token
Please enter the gitlab-ci description for this runner:
[instance-r3sqbw9j]: runner-001
Please enter the gitlab-ci tags for this runner (comma separated):
runner-001
Registering runner... succeeded                     runner=S8AC783Z
Please enter the executor: docker+machine, docker-ssh+machine, kubernetes, docker, docker-ssh, shell, ssh, virtualbox, custom, parallels:
shell 
Please enter the default Docker image (e.g. ruby:2.6):
docker

# 注册成功后gitlab-runner配置会自动重载,配置可查看
/etc/gitlab-runner/config.toml 

查看注册是否成功,可以登录gitlab进行查看:Admin Area - Overview - Runners


四、编写gitlab-ci.yml

1、gitlab-ci.yml参数

关键字描述
script必须参数,运行器需要执行的脚本
image使用Docker image镜像
services使用Docker services镜像
before_script作业执行前需要执行的命令
after_script作业执行后需要执行的命令
stages定义流水线所有的阶段
stage定义作业所处流水线的阶段(默认test阶段)
only限制作业在什么时候创建
except限制作业在什么时候不创建
tags作用使用的Runner运行器的标签列表
allow_failure允许作业失败,失败的作业不影响提交的状态
when什么时候运行作业
environment作用部署的环境名称
cache指定需要在job之间缓存的文件或目录
artifacts归档文件列表,指定成功后应附加到job的文件和目录的列表
dependencies当前作业依赖的其他作业,你可以使用依赖作业的归档文件
coverage作业的代码覆盖率
retry作业失败时,可以自动执行多少次
parallel指定并行运行的作业实例
trigger定义下游流水线的触发器
include作业加载其他YAML文件
extends控制实体从哪里继承
pages上传GitLab Pages的结果
retry作业失败时,可以自动执行多少次
variables定义环境变量

2、.gitlab-ci.yml文件示例

# 定义三个构建环节:test、build和deploy
stages:
  - test
  - build
  - deploy

# 配置环境变量,常用于指定部署环境如dev/beta/prod,或副本数、配置等
variables:
  MODEL_NAME: "tobo_yolo"
  NVIDIA_VISIBLE_DEVICES: 1
  NUM: 1
  IMAGE_NAME: "ycv_detect_server_$CI_COMMIT_REF_NAME:$CI_PIPELINE_ID"
  CONTAINER_NAME: "ds-GPU$NVIDIA_VISIBLE_DEVICES-$MODEL_NAME-$NUM"
#  CONTAINER_NAME: "ds_GPU1_tobo2"

# test构建阶段
test:
  stage: test
# tags指定运行的gitlab-runner
  tags:
  - runner-cv
  only:
  - dev_yolo
# script:运行的shell脚本
  script:
  - echo "流水线ID:"
  - echo $CI_PIPELINE_ID
  - echo "镜像版本:"
  - echo $IMAGE_NAME
  - echo "容器名:" 
  - echo $CONTAINER_NAME

build:
  stage: build
  tags:
  - runner-cv
  only:
  - dev_yolo
  script:
#    - echo $CONTAINER_NAME
    - docker build -t $IMAGE_NAME .
# when:指定运行方式为手动
  when: manual

deploy:
  stage: deploy
  tags:
  - runner-cv
  only:
  - dev_yolo
  script:
    - docker ps
    - docker stop $CONTAINER_NAME && true 
    - docker rm $CONTAINER_NAME && true
    - docker run -d --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=$NVIDIA_VISIBLE_DEVICES -e MODEL_NAME=$MODEL_NAME --name $CONTAINER_NAME -v /mnt/docker/tensorflow/uploads:/instance/src/uploads --restart=no -e DB_IP=$DB_IP -e DB_PORT=$DB_PORT -e DB_USERNAME=$DB_USERNAME -e DB_PASSWORD=$DB_PASSWORD -e DB_DATABASE=$DB_DATABASE -e REDIS_IP=$REDIS_IP -e REDIS_PORT=$REDIS_PORT -e REDIS_DATABASE=$REDIS_DATABASE -e REDIS_PASSWORD=$REDIS_PASSWORD $IMAGE_NAME
  when: manual


觉得有用的点个收藏 吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值