You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:05:04