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注册

image.png
 
 
进入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/"
image.png
 
 
 
在gitlab中查看刚注册的runner
image.png
 
 

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配置策略

  1. 代码格式校验
  2. 校验测试用例
  3. 构建镜像并部署-需要在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
 
在公共组件库中创建公用账号
image.png
 
 
在gitsubmodule中使用用户和token登录拉取方式
 
posted @ 2024-06-13 10:32  Mr沈  阅读(43)  评论(0编辑  收藏  举报