【gitlab】gitlabrunner部署

1、下载镜像

docker pull gitlab/gitlab-runner:latest

2、启动gitrunner容器

docker run -d --name gitlab-runner --restart always \

-v /root/gitrunner/config:/etc/gitlab-runner \ ///gitlab-runner的配置目录,挂载在宿主机上方便修改,里面有config.toml配置文件

-v /var/run/docker.sock:/var/run/docker.sock \

-v /localcache/mavenrepo:/root/.m2/ \

-v /root/gitbook/books:/buildres \

gitlab/gitlab-runner:latest

进入容器:把docker镜像库的ca.crt签名根证书挂到系统信任类库中,不然里面docker login 或者 pull 都提示证书问题:

解决ssl客户端证书验证的问题:

sudo cp ca.crt[这个证书可以在gitrunner启动是 挂载到容器上去] /usr/local/share/ca-certificates/

sudo update-ca-certificates

3、注册gitlab-runner的执行器到gitlab上

gitlab-runner会负责不断轮训gitlab的任务队列,发现任务就开启执行器开始完成任务

注册方法:

a: 进入gitlab,项目或者项目组 然后创建一个runner,获取页面提供的待token的指令,然后进入上面启动的gitrunner容器。执行指令gitlab-runner register --url http://gitlab.example.com/ --token t0k3nxxxxx

b: 可以注册shell docker k8s类型的执行器

4、查看配置config.toml配置文件

这个配置文件是执行器注册时生成的

格式例子如下:

concurrent = 1
check_interval = 0
[session_server]
  session_timeout = 1800

[[runners]]
  name = "6e216efd6d37"
  url = "https://47.xx.xx.22/gitlab"
  token = "glrt-PQzw9H8PTfrx51zeQM38"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]  //这个可以去掉,没有这种分布式缓存的话,也可以自己安装minio然后配置
    [runners.cache.gcs] //这个可以去掉
    [runners.cache.azure] //这个可以去掉
  [runners.docker]
    tls_verify = false
    image = "47.xx.xx.xx:444/base/docker:latest"   ///这个是一个配置的全局镜像,可以在.gitlab-ci.yml文件中覆盖
    privileged = false   //启动的docker不是特权模式
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false  //启动缓存
    volumes = ["/var/run/docker.sock:/var/run/docker.sock","/root/gitbook/books:/buildres","/cache","/root/.kube/config:/root/.kube/config","/localcache/mavenrepo:/root/.m2/"]
      ///localcache/mavenrepo:/root/.m2/ 如果是maven执行器的话,就缓存下载的jar,避免每次都去下载
     //volumes 配置了docker容器执行器启动时挂载的宿主机的目录
     ///var/run/docker.sock:/var/run/docker.sock ,配置了启动的容器可以链接到宿主机的docker-daemon进行通信,也就是说gitrunner启动的docker容器
     //执行器都是和gitrunner在同一个宿主机上的。 这样就不用docker in docker模式 完成后面的拉取进行、构建镜像等操作了
     cache 配置作用就是在启动docker容器中有一个根目录是/cache,同时docker会/var/lib/docker/volume/创建一个匿名卷,然后关联到/cache
     //存储缓存的文件
    pull_policy = ["if-not-present"]  ///镜像有的话就不下载
    shm_size = 0

5、缓存目录

上面的/cache 缓存目录生成的匿名卷就是在这里,一个执行器+项目 生成一个目录

/var/lib/docker/volumes:

runner-{runnerid}-projects-{projectid}-concurrent-{num}-cache-3c3f060a0374fc8bc39395164f415a70|c33bcaa1fd2c77edfc3893b41966cea

以3c3f060a0374fc8bc39395164f415a70结尾的文件夹中存放的就是缓存文件

缓存文件都是最后会被压缩成cache.zip文件。

以c33bcaa1fd2c77edfc3893b41966cea8 结尾的文件夹中存放的是代码源文件

6、缓存使用说明

1、首先gitrunner要配置缓存使用

2、在job是配置缓存,如:

stages:
  - build
  - pushimage
  - deployk8s

//所有的job都是自动在项目代码仓库目录,每个job执行时,就会把工程代码load工作目录
build-job:
  stage: build
  image: 47.xx.xx.xx:444/base/maven:3.8.1-jdk-8
  script:
    - mvn -version
    - mvn clean package -Dmaven.test.skip=true
  tags:
    - docker_runner
  cache:
    key: $CACHE_KEY  ///这个key的作用是,在/cache目录下创建这个含这个key相关的目录,区分下避免不同job的缓存覆盖了
    paths:
      - target/*.jar    //意思就是缓存target下面的所有jar,打包压缩成cache.zip文件,传到对应的缓存目录,如果设置了分布式缓存的话还会上传到对应的服务器,不然就是本地,就是在docker的volume上,就是上面说明的目录
    policy: push  ///缓存策略就是上传,也有pull就是拉取
  only:
    - main
# artifacts:  //配置工件,这个工件会自动上传到gitlab上,在页面可以下载,可以设置和这个工件的有效期
#   paths:
#     - target/*.jar

pushimage-job:
  stage: pushimage
  image: 47.xx.xx.xx:444/base/docker:latest
  before_script:
    - ls /
  script:
    - docker login -u $HARBOR_USERNAME -p $HARBOR_PASSWORD $HARBOR_URL
    - mv ./target/*.jar ./
    - ls
    - docker build -t 47.109.77.22:444/base/rocketmqui:latest .
    - docker push  47.109.77.22:444/base/rocketmqui:latest
  cache:
    key: $CACHE_KEY //这个key要和上一个job的key的值一致才行,不然不会自动解压缓存文件
    paths:
      - target/   ///这里就会使用之前job的缓存,上job上传到本地目录的cache.zip会自动解压到当前工作目录。就是target/*
    policy: pull
  tags:
    - docker_runner

1、总结就是:

gitlab-cicd的缓存就是: 每个job会创建缓存,然后把缓存的文件打包压缩传到特定的目录,然后下一个job 使用了cache的话就自动下载上个job的缓存 然后解压,就可以使用了。

使用本地目录作为缓存的话,如果并行job的话可能就会产生覆盖的文件。

使用minio 解决分布式缓存的问题: https://blog.51cto.com/u_15098009/2612611

相关推荐
骑士9991115 小时前
centos7 安装gitlab
gitlab
it&s me16 小时前
gitlab-development-kit部署gitlab《二》
gitlab
陈逸轩*^_^*2 天前
Git与GitLab的企业实战 笔记(尚硅谷)
笔记·git·gitlab
獨枭2 天前
GitLab 部署和配置指南
gitlab
loserbai-4 天前
gitlab修改root密码详细详情,高版本通用
gitlab
极小狐4 天前
GitLab 如何降级?
gitlab·devsecops·devops·极狐gitlab·安全合规
binqian4 天前
【gitlab-ce】各组件介绍
gitlab
极小狐4 天前
极狐GitLab 发布安全补丁版本17.5.2, 17.4.4, 17.3.7
gitlab·devsecops·devops·极狐gitlab·安全合规
Vanish_ran4 天前
gitlab与jenkins
运维·gitlab·jenkins