我正在尝试使用this docker image设置Jenkins管道。它需要按以下方式执行:
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
}
}
在我的PC系统上执行这个命令效果很好。在执行Jenkins管道时,我最终得到了这个错误:
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.
我通读了Jenkins + Docker的文档,但我找不到如何使用这样的映像,所有的指南通常都解释如何运行docker映像和执行shell命令。
如果我没弄错的话,this Dockerfile就是上述Docker图像的布局。
如何绕过这个问题并使用run参数调用Docker容器?
1条答案
按热度按时间ndh0cuux1#
agent
模式适用于在容器内运行Jenkins构建步骤的情况;在您的示例中,运行archiveArtifacts
步骤 * 而不是 * 容器通常所做的事情。您可以想象在agent { docker { image } }
行中使用只包含构建工具的映像,如golang
或Java映像之一,Jenkins将注入几行docker
命令行选项,以便它针对工作区树运行。Jenkins Docker接口可能没有内置的方法来等待容器完成,相反,您可以启动一个“sidecar”容器,然后从容器外部运行
docker wait
still来等待它完成。