Ism*_*ail 25 jenkins docker jenkins-pipeline
我有一个 Jenkinsfile,我试图在其中执行npm run test一个容器。当我用inside它运行时会失败,但是当我用withRun它运行时会按照我的意愿运行。
代码参考 inside
stage('Test') {
docker.image('justinribeiro/chrome-headless').inside ("-p 9222:9222 --security-opt seccomp=$WORKSPACE/chrome.json") {
sh label:
'Running npm test',
script: '''
npm run test
'''
}
}
Run Code Online (Sandbox Code Playgroud)
和 withRun
stage('Test') {
docker.image('justinribeiro/chrome-headless').withRun ("-p 9222:9222 --security-opt seccomp=$WORKSPACE/chrome.json") {
sh label:
'Running npm test',
script: '''
npm run test
'''
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想了解它们之间的区别是什么。
我观察到inside增加了卷并cat在容器上运行,而withRun没有。
我还阅读了文档https://jenkins.io/doc/book/pipeline/docker/但理解得不够好。
更详细的解释将不胜感激。
谢谢。
Mat*_*ard 27
Image.run([args, command])
用于docker run运行图像,并返回一个您可以稍后停止的容器。可以添加其他参数,例如“-p 8080:8080 --memory-swap=-1”。可选命令相当于在镜像后指定的 Docker 命令。在构建中记录运行指纹。
Image.withRun[(args[, command])] {...}
就像run但在容器主体退出后立即停止容器,因此您不需要try-finally块。
Image.inside[(args)] {...}
像withRun这样在主体的持续时间内启动一个容器,但是主体启动的所有外部命令 (sh) 都在容器内部而不是在主机上运行。这些命令在同一个工作目录(通常是 Jenkins 代理工作区)中运行,这意味着 Docker 服务器必须在 localhost 上。
因此,从上面可以看出,您的sh方法命令(特别是npm命令)将在主机上执行withRun,但在容器内执行inside。
链接到文档:https : //opensource.triology.de/jenkins/pipeline-syntax/globals
| 归档时间: |
|
| 查看次数: |
9819 次 |
| 最近记录: |