自学内容网 自学内容网

【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 


原文地址:https://blog.csdn.net/binqian/article/details/143863507

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!