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

如何在Jenkins流水线中正确传递Docker Run参数?

问题描述

我尝试使用particle/buildpack-particle-firmware镜像搭建Jenkins流水线,本地执行以下docker run命令可正常运行:

docker run --rm \
  -v $PROJECT_DIR:/input \
  -v $PROJECT_DIR:/output \
  -e PLATFORM_ID=$PLATFORM_ID \
  particle/buildpack-particle-firmware:$VERSION

但我的Jenkins流水线配置如下时执行出错:

stage('build firmware') {
  agent { 
      docker { 
        image 'particle/buildpack-particle-firmware:4.0.2-tracker' 
        args '-v application:/input -v application:/output -e PLATFORM_ID=26 particle/buildpack-particle-firmware:4.0.2-tracker'    
      }
   }
   steps {
      archiveArtifacts artifacts: 'application/target/*.bin', fingerprint: true, onlyIfSuccessful: true
   }
}

错误信息:

java.io.IOException: Failed to run image 'particle/buildpack-particle-firmware:4.0.2-tracker'. Error: docker: Error response from daemon: failed to create shim: OCI runtime create failed: runc create failed: unable to start container process: exec: "-w": executable file not found in $PATH: unknown.

已知该镜像对应的Dockerfile,查阅Jenkins+Docker文档未找到该类镜像的使用方法,请问如何解决该问题,正确调用带Run参数的Docker容器?


解决方法

你的Jenkins Docker Agent配置存在两个核心问题:

  1. args参数重复指定了镜像名:Jenkins的docker agent会自动处理镜像启动,args只需要传入额外参数(如挂载、环境变量),不需要重复写镜像名,否则会被当成启动命令执行,导致错误。
  2. 挂载路径的上下文问题:Jenkins流水线中,application是工作目录的相对路径,需要用绝对路径或Jenkins内置环境变量映射。

修正方案一:调整Docker Agent配置

stage('build firmware') {
  agent { 
      docker { 
        image 'particle/buildpack-particle-firmware:4.0.2-tracker' 
        args "-v ${env.WORKSPACE}:/input -v ${env.WORKSPACE}:/output -e PLATFORM_ID=26"    
      }
   }
   steps {
      archiveArtifacts artifacts: 'target/*.bin', fingerprint: true, onlyIfSuccessful: true
   }
}

关键调整点:

  • 移除args中的镜像名,只保留挂载和环境变量参数
  • 使用${env.WORKSPACE}获取Jenkins当前工作目录的绝对路径,确保挂载路径正确
  • 调整archiveArtifacts路径,容器内输出目录/output对应Jenkins工作目录,直接写target/*.bin即可

修正方案二:直接在Steps中执行docker run命令

若该镜像设计为一次性执行构建任务就退出,可直接用docker run命令替代Docker Agent,更贴近本地执行逻辑:

stage('build firmware') {
  agent any
  steps {
    sh """
      docker run --rm \
        -v ${env.WORKSPACE}:/input \
        -v ${env.WORKSPACE}:/output \
        -e PLATFORM_ID=26 \
        particle/buildpack-particle-firmware:4.0.2-tracker
    """
    archiveArtifacts artifacts: 'target/*.bin', fingerprint: true, onlyIfSuccessful: true
  }
}

内容的提问来源于stack exchange,提问作者extraj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:05:19