jenkins 在不同的 stage 之间共享文件

在使用 k8s 或者 docker 作为 jenkins 的 slave 的时候,会出现一个问题:两个 stage 可能不再同一个机器,或者不再同一个目录上,stage A 中编译的 dist 文件, stage B 中部署需要用到的时候当前目录无法找到 dist 文件。解决方式是使用 stash 和 unstash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
stage("npm build") {
when {
branch "dev"
}
steps {
sh """
npm run deploy
"""
stash includes: 'dist/**/*', name:'npm_dist'
}
}
stage("ansible deploy") {
when {
branch "dev"
}
agent {
docker {
image "ansible:1.2.11"
}
}
steps {
unstash 'npm_dist'
script {
if (fileExists('dist.zip')) {
sh('rm -f dist.zip')
}
}
zip zipFile: 'dist.zip',archive: false,dir: 'dist'
sh """
ansible-playbook ansible-deploy.yml --inventory-file=hosts -e target=dev --timeout=120
"""
}
}

使用 stash 将目标文件归档,使用 unstash 文件在被归档的文件下载到当前目录。