docker.image().inside()不';t在我的图像中运行sh命令
我正在写詹金斯管道。我正在创建一个docker映像,该映像运行来自python virtualenv的命令(在映像内部)。我在创建docker映像时创建此虚拟环境。当我做以下事情时:docker.image().inside()不';t在我的图像中运行sh命令,docker,jenkins,jenkins-pipeline,Docker,Jenkins,Jenkins Pipeline,我正在写詹金斯管道。我正在创建一个docker映像,该映像运行来自python virtualenv的命令(在映像内部)。我在创建docker映像时创建此虚拟环境。当我做以下事情时: stage() { steps { script { def dockerImage = docker.build('-f <path_to_dockerfile> .') dockerImage.inside() { sh 'venv/bin/iso
stage() {
steps {
script {
def dockerImage = docker.build('-f <path_to_dockerfile> .')
dockerImage.inside() {
sh 'venv/bin/isort src'
}
}
}
}
我做错了什么吗?如果仔细查看Jenkins日志,它执行的
docker run
命令可以模拟工作区环境image.inside{…}
bind将工作区目录装载到同一路径的容器中,将当前目录重写为工作区目录,并重写默认命令等
我认为这里有两个很好的选择:
dockerImage.inside() {
sh '/app/venv/bin/isort src'
}
image.run
以“正常”运行映像,可以使用-v
选项将工作区目录的装载部分绑定到容器中。这与您运行容器的方式相同
dockerImage.run("-v ${env.WORKSPACE}/src:/app/src")
此构造将运行图像中的任何默认CMD
;问题中的Dockerfile中似乎缺少这一行您是否尝试过
sh'/app/venv/bin/isort src'
?如果我尝试了pwd
,它将显示主机中jenkins工作区的路径。而且,此路径没有venv
,并且/app/venv/bin/isort
是docker映像内的路径。从这里,我假设我的命令没有在映像中运行。另外,我希望dockerImage.inside(){sh'venv/bin/isort src'}
应该触发docker run-it-v venv/bin/isort src
。但我在詹金斯的工作日志中没有看到这一点。选项一应该比选项二更可取,因为选项二将被一个代理{dockerfile true}
替换,以便在一行中自动正确完成所有这些操作。谢谢@David和@Thanh!你的建议奏效了。我误解了什么。谢谢你的帮助!
dockerImage.run("-v ${env.WORKSPACE}/src:/app/src")