【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

相关推荐
梁萌13 小时前
docker部署gitlab和gitlab runner
docker·eureka·gitlab
johnnyAndCode14 小时前
Idea 设置GitLab时使用账密,而不是token的配置方法
gitlab·idea
天外飞雨14 小时前
Gitlab使用
gitlab
BUTCHER51 天前
GitLab SSH 密钥配置
运维·ssh·gitlab
明月心9521 天前
GitLab使用
gitlab
明月心9522 天前
gitlab pull requets
gitlab
BUTCHER52 天前
GitLab基本设置
gitlab
张小凡vip3 天前
Kubernetes---gitlab的ci/cd发布基于k8s的项目示例参考
ci/cd·kubernetes·gitlab
cuijiecheng20184 天前
GitLab创建项目
gitlab
_运维那些事儿6 天前
GitLabCI/CD语法
linux·服务器·git·ci/cd·gitlab·运维开发·devops