如何在Jenkins流水线的下一阶段获取build文件夹?
问题原因
- 每个Stage使用了独立的Agent(Docker容器和
agent any对应的节点),Jenkins中不同Agent的工作空间完全隔离,Build阶段在Docker容器内生成的build文件夹不会自动同步到下一个Stage的工作空间。 archiveArtifacts仅将文件归档存储到Jenkins服务器,不会自动解压到后续Stage的工作空间,必须手动执行解压操作。- Build阶段在
dir('./app')目录下执行构建,build文件夹实际生成在app/build路径下,后续Stage直接查找./build路径本身就不对。
解决方案
方案一:使用Stash/Unstash跨Stage传递文件(推荐,轻量高效)
Stash是Jenkins专门用于跨Agent/Stage传递文件的机制,比归档更适合临时传递构建产物。
修改后的Pipeline代码:
@Library('shared-library') _ pipeline { agent none stages{ stage("Test"){ agent { docker { image 'node:lts-alpine' args '-u root:root' } } steps{ sh "chmod +x -R ${env.WORKSPACE}" sh './app/scripts/test.sh' } } stage("Build"){ agent { docker { image 'node:lts-alpine' args '-u root:root' } } steps{ dir('./app'){ sh "chmod +x -R ${env.WORKSPACE}" sh "npm install" sh "./scripts/deliver-for-development.sh" // 将app/build目录下的所有文件暂存,命名为react-build stash includes: 'build/**', name: 'react-build' } } } stage("Deliver for Development"){ agent any when { branch "development" } steps{ // 把暂存的文件解压到当前工作空间的对应路径 unstash 'react-build' // 现在可以正确访问到构建产物 sh 'ls ./app/build' } } } }
方案二:使用Archive/Unarchive(适合需要持久化构建产物的场景)
如果需要长期保存构建产物,同时要在后续Stage使用,需添加unarchive步骤:
修改后的Pipeline代码:
@Library('shared-library') _ pipeline { agent none stages{ stage("Test"){ agent { docker { image 'node:lts-alpine' args '-u root:root' } } steps{ sh "chmod +x -R ${env.WORKSPACE}" sh './app/scripts/test.sh' } } stage("Build"){ agent { docker { image 'node:lts-alpine' args '-u root:root' } } steps{ dir('./app'){ sh "chmod +x -R ${env.WORKSPACE}" sh "npm install" sh "./scripts/deliver-for-development.sh" // 归档app/build下的所有文件,路径相对于Jenkins工作空间 archiveArtifacts artifacts: "app/build/**", fingerprint: true } } } stage("Deliver for Development"){ agent any when { branch "development" } steps{ // 解压归档的文件到当前工作空间 unarchive artifacts: "app/build/**", fingerprint: true // 查看解压后的构建产物 sh 'ls ./app/build' } } } }
额外注意事项
- 可以在Build阶段添加
sh 'ls -la ./build'命令,验证npm run build是否确实在app目录下生成了build文件夹。 - 不同Agent的工作空间权限可能存在差异,必要时在Deliver阶段添加
chmod +x -R ./app/build命令调整权限。
内容的提问来源于stack exchange,提问作者user11631346
相关产品推荐
相关产品推荐

