GitLab-CI (自动化集成&部署)
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
# 选择执行器,选的是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上流水线中手动点击执行
按照顺序执行,前面某一步失败后续均不执行
新版本号时需要改动代码中version文件中版本号后push代码自动打包生成镜像部署服务
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登录拉取方式