Gitlab CI/CD 是一款用于持续集成(CI),持续交付(CD)的工具,相似的工具有Jenkins、Travis CI、GoCD等。 Gitlab的CI/CD算是比较简单的了,只需要依靠一份".gitlab-ci.yml",将该文件随代码上传,Gitlab就会自动执行相应的任务,从而实现CI/CD。 gitlab-runner可实现cicd
1. 安装gitlab-runner
docker run -d --name gitlab-runner --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /BD/dockerfile:/BD/dockerfile -v /data/gitlab_deploy/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:latest 将/etc/gitlab-runner配置文件夹挂载出来方便更改配置,使用runner使用docker执行器操作宿主机docker则需要将docker.sock挂载2. gitlab-runner注册
进入gitlab-runner容器中执行# 进入容器
[root@dce-10-6-215-10 ~]# docker exec -it gitlab-runner bash
# 注册 runner
root@55c90539459e:/# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=48 revision=16ae0625 version=14.8.3
Running in system-mode.
# 输入 gitlab 的地址
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.96.146:58080
# 输入 gitlab 上的 token,就是上面的
Enter the registration token:
osG39dyuvojcxk5xucx
# 输入描述信息
Enter a description for the runner:
[55c90539459e]: build-runner
# 输入标签,这个gitlab-runner输入一个标记,这个 tag 非常重要,在后续的使用过程中需要使用这个 tag 来指定 gitlab-runner
Enter tags for the runner (comma-separated):
build
Enter optional maintenance note for the runner:
Registering runner... succeeded runner=osG39v5F
# 选择执行器,选的是docker
Enter an executor: ssh, virtualbox, docker-ssh+machine, kubernetes, custom, parallels, shell, docker, docker-ssh, docker+machine:
docker
# 填一个镜像及版本,前端选node:18.18
docker:24.0.5退出容器,查看gitlab-runner配置,注意volumes = ["/var/run/docker.sock:/var/run/docker.sock","/BD/dockerfile:/BD/dockerfile","/cache"]是否挂载,没有则需要添加
/BD/dockerfile:/BD/dockerfile挂载目的是将宿主机部署目录挂载进runner容器中,并且将runner容器中的该路径挂载进docker执行器内,以便保持代码中cicd部署文件与服务器相同$ cd /data/gitlab_deploy/gitlab-runner/config $ sudo cat config.toml
concurrent = 1 check_interval = 0 shutdown_timeout = 0 [session_server] session_timeout = 1800 [[runners]] name = "build-runner" url = "http://58.210.96.146:58080/" id = 13 token = "iJyy5_-a8Hatzp12zmHu" token_obtained_at = 2023-10-08T08:20:24Z token_expires_at = 0001-01-01T00:00:00Z executor = "docker" [runners.cache] MaxUploadedArchiveSize = 0 [runners.docker] tls_verify = false image = "docker:24.0.5" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/var/run/docker.sock:/var/run/docker.sock","/BD/dockerfile:/BD/dockerfile","/cache"] shm_size = 0注意:内网访问gitlab时URL为http://10.0.1.4:80/,需要在config.toml中加上clone_url = "http://10.0.1.4:80/" 在gitlab中查看刚注册的runner
3. 配置参数 .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 | 定义环境变量 |
后端cicd配置策略
- 代码格式校验
- 校验测试用例
- 构建镜像并部署-需要在gitlab上流水线中手动点击执行
stages: - test - deploy # 代码格式基本校验和执行测试用例 style-test: stage: test tags: - style-test script: - pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple - pip3 install -r requirements.txt - export PATH=/home/gitlab-runner/.local/bin:$PATH - cd detectionAdmin/ - echo "start lint-style---$PATH" - pylint detectionAdmin/ --fail-under=8 - echo "end lint-style---" - echo "start UnitTest---" - python3 manage.py test --noinput - echo "end UnitTest---" # 构建镜像与部署web服务 deployweb-job: before_script: - export version=$(cat version) tags: - build237 stage: deploy when: manual script: - echo "start build images..." - export PATH=/home/gitlab-runner/.local/bin:$PATH - cd docker - sh rebuild_base.sh - sh rebuild.sh $version - echo "start deploy..." - echo $version - cd ../ - cp -R deploy/deploy_237/. /BD/dockerfile/ - cd /BD/dockerfile - sed -i "s/WEB_IMAGE=detection_webserver:[0-9.]\+/WEB_IMAGE=detection_webserver:$version/" .env - cat .env - sh restart_web.sh
4. 引用子模块
在.gitlab-ci.yml文件上添加# 拉取公共组件 variables: GIT_SUBMODULE_STRATEGY: recursive在公共组件库中创建公用账号 在gitsubmodule中使用用户和token登录拉取方式 标签:集成,BD,CI,gitlab,runner,GitLab,作业,docker,dockerfile From: https://www.cnblogs.com/Mr-shen/p/18245382