1. 授权认证
  2. 获取用户个人信息
  3. 项目协同
  4. 代码托管
  5. 持续集成
  6. 制品仓库
  7. 测试管理
  8. 文档管理
  1. 项目协同
  2. 代码仓库
  3. DevOps 实践之旅
  4. 一分钟开始持续集成之旅
  5. 持续部署
  6. 制品库

持续集成的缓存目录

功能介绍

项目本地安装依赖包时,会把下载的文件缓存起来,所以下次安装快很多。比如 npm install 会在项目中生成 ./node_modules,而缓存在 ~/.npm 目录,后者体积更小,更通用。

如果使用「CODING 提供的云主机」进行持续集成构建,每次都会创建新的虚拟服务器,构建完毕即销毁,所以需要指定「缓存目录」保存起来用于加速下次构建。

如果使用「自定义构建节点」进行持续集成构建,构建完毕不会销毁服务器,所以无需指定「缓存目录」。

如果在持续集成中使用 Docker,则需要把「缓存目录」挂载到 Docker 中。

默认环境构建

「默认环境」是 Linux 系统(root 用户),缓存目录如下:

包管理工具 缓存目录
Maven /root/.m2/
Gradle /root/.gradle/
npm /root/.npm/
composer /root/.cache/composer/
pip3 /root/.cache/pip/
yarn /usr/local/share/.cache/yarn/

在持续集成设置中勾选对应的「缓存目录」即可,如果没有则自行录入。

CODING 持续集成 缓存目录

Docker 环境构建

如果使用 Docker 环境构建,先勾选「缓存目录」,再挂载到 Docker 中即可(一般为 root 用户)。Jenkinsfile

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([
          $class: 'GitSCM',
          branches: [[name: env.GIT_BUILD_REF]], 
          userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]
        ])
      }
    }
    stage('Java 缓存') {
      agent {
        docker {
          image 'adoptopenjdk:11-jdk-hotspot'
          args '-v /root/.gradle/:/root/.gradle/ -v /root/.m2/:/root/.m2/'
          reuseNode true
        }
      }
      steps {
        sh './gradlew test'
      }
    }
    stage('npm 缓存') {
      steps {
        script {
          docker.image('node:14').inside('-v /root/.npm/:/root/.npm/') {
            sh 'npm install'
          }
        }
      }
    }
  }
}

如果使用「自定义构建节点」,需按照服务器的用户名,比如腾讯云 Ubuntu 服务器的默认用户名为 ubuntu,所以缓存目录为 /home/ubuntu/.npm/,对应的代码为:

docker.image('node:14').inside('-v /home/ubuntu/.npm/:/root/.npm/') {
  sh 'npm install'
}

缓存 Docker 基础镜像

每次构建都拉取 Docker 基础镜像(如 Dockerfile 继承的镜像、CI agent 镜像),耗时较久,可通过缓存进行加速。

参考以下 Jenkinsfile,修改镜像名称即可:

pipeline {
  agent any
  environment{
    DOCKER_CACHE_EXISTS = fileExists '/root/.cache/docker/php-8.0-cli.tar'
  }
  stages {
    stage('加载缓存') {
      when { expression { DOCKER_CACHE_EXISTS == 'true' } }
      steps {
        sh 'docker load -i /root/.cache/docker/php-8.0-cli.tar'
      }
    }
    stage('使用镜像(请修改此段)') {
      agent {
        docker {
          image 'php:8.0-cli'
          args '-v /root/.cache/:/root/.cache/'
          reuseNode 'true'
        }
      }
      steps {
        sh "php -v"
      }
    }
    stage('生成缓存(仅运行一次)') {
      when { expression { DOCKER_CACHE_EXISTS == 'false' } }
      steps {
        sh 'mkdir -p /root/.cache/docker/'
        sh 'docker save -o /root/.cache/docker/php-8.0-cli.tar php:8.0-cli'
      }
    }
  }
}

缓存目录增加 /root/.cache/,然后构建两次,即可发现第二次速度变快,说明缓存已生效:

警告: 缓存镜像会逐渐过时,建议定时清除。比如官方「php:8.0-cli」逐渐指向「php:8.0.1-cli」、「php:8.0.2-cli」,而缓存的「php:8.0-cli」不会变化。

上一篇持续集成的环境变量
最近更新
感谢反馈有用
感谢反馈没用

在阅读中是否遇到以下问题?

您希望我们如何改进?