目录
一、前言
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
觉得有用的点个收藏 吧~