当前位置: 首页 > news >正文

【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 = falseimage = "47.xx.xx.xx:444/base/docker:latest"   ///这个是一个配置的全局镜像,可以在.gitlab-ci.yml文件中覆盖privileged = false   //启动的docker不是特权模式disable_entrypoint_overwrite = falseoom_kill_disable = falsedisable_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: buildimage: 47.xx.xx.xx:444/base/maven:3.8.1-jdk-8script:- mvn -version- mvn clean package -Dmaven.test.skip=truetags:- docker_runnercache: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/*.jarpushimage-job:stage: pushimageimage: 47.xx.xx.xx:444/base/docker:latestbefore_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:latestcache:key: $CACHE_KEY //这个key要和上一个job的key的值一致才行,不然不会自动解压缓存文件paths:- target/   ///这里就会使用之前job的缓存,上job上传到本地目录的cache.zip会自动解压到当前工作目录。就是target/*policy: pulltags:- docker_runner

  1、总结就是: 

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

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

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

http://www.lryc.cn/news/487522.html

相关文章:

  • Flink监控checkpoint
  • Ribbon 入门实战指南
  • uniapp: 微信小程序包体积超过2M的优化方法(主包从2.7M优化到1.5M以内)
  • 【百日算法计划】:每日一题,见证成长(026)
  • 【大模型】prompt实践总结
  • 在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】
  • 本地部署Apache Answer搭建高效的知识型社区并一键发布到公网流程
  • Ubuntu常见命令
  • 网络安全领域的最新动态和漏洞信息
  • 华为开源自研AI框架昇思MindSpore应用案例:人体关键点检测模型Lite-HRNet
  • 每日OJ题_牛客_天使果冻_递推_C++_Java
  • 独立站干货:WordPress主机推荐
  • 支持多种快充协议和支持多种功能的诱骗取电协议芯片
  • Android中常见内存泄漏的场景和解决方案
  • MyBatis Plus中的@TableId注解
  • java基础概念33:常见API-Objects工具类
  • 脚手架vue-cli,webpack模板
  • 什么是React Native?
  • Three.js LOD(Level of Detail)通过根据视距调整渲染细节的技术
  • Vulnhub靶场案例渗透[12]-Grotesque: 1.0.1
  • 招聘和面试
  • Gin 框架入门(GO)-1
  • LeetCode:700. 二叉搜索树中的搜索
  • 用邻接矩阵实现图的深度优先遍历
  • vue2中实现token的无感刷新
  • 无需Photoshop即可在线裁剪和调整图像大小的工具
  • 云安全之法律和合规
  • 倒计时功能分享
  • 【论文分享】使用多源数据识别建筑功能:以中国三大城市群为例
  • 华为手机启用ADB无线调试功能