Jenkins 中的构建产物与缓存
在 CICD 的流程中,需要保存的产物主要有两类,构建产物和缓存。构建产物是最终的执行结果,缓存是为了优化下一次的构建速度。本篇主要描述的是在 Jenkins 中如何对构建产物和缓存进行归档,并结合对象存储进行实践。有部分示例使用的是 在 Kubernetes 上动态创建 Jenkins Slave 进行构建,配置过程可以参考超链接文档。
1. 部署 Minio 及 S3cmd 使用
1.1 部署 Minio
- 安装
|
|
- 配置
- 在 Jenkins 配置中,设置 Minio 相关的配置

- 新建一条自由风格的流水线

- 在构建日志中,可以看到已经归档成功

- 在 Minio 中,查看构建归档的结果

3. 缓存
Jenkins 中的缓存主要有两种实践方式,全部流水线共用缓存,每条流水线单独缓存。由于采用的是 Kubernetes 动态提供的 Agent ,可以将主机上的 Docker Volume 挂载到 Pod ,提供 Node 级别的缓存,这样全部 Pod 就会共用一个缓存目录。这样处理比较简单,但同时共用一个依赖库文件夹会带来潜在的并发问题。下图是相关的配置:
- 搜索并安装插件 jobcacher

- 查看 jobcacher 插件配置
/var/jenkins_home
下的文件存储。

- 新建流水线
pipeline {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
spec:
containers:</p>
<ul>
<li>name: nodejs
image: node:10-alpine
command:
<ul>
<li>cat
tty: true
"""
}}
stages {
stage('checkout') {
steps {
git branch: 'master', url: "<a href="https://github.com/vuejs/vue">https://github.com/vuejs/vue</a>"
}
}
stage('install') {
steps {
container('nodejs') {
cache(caches: [[$class: 'ArbitraryFileCache', excludes: '', includes: '*<em>/</em>', path: 'node_modules']], maxCacheSize: 512) {
sh "npm install"
}
}
}
}
}
}
- 首次构建
可以看到 Jenkins 将设置的目录进行了缓存。在 Jenkins 目录
/var/jenkins_home/jobs/test/cache/3ec03583f8eaec275cb2183db769ff47
中,可以看到相关文件。
|
|
- 带缓存构建