小编miy*_*jan的帖子

Jenkins声明性管道:如何在docker容器中挂载与工作空间关联的临时卷?

我想在docker容器中安装与工作区关联的临时卷以进行gradle缓存.使用Scripted Pipeline,可以像下面这样编写.

docker.image('my-gradle').inside("-v ${pwd(tmp: true)}:/home/jenkins/.gradle") {
    sh './gradlew test'
}
Run Code Online (Sandbox Code Playgroud)

但是使用Declarative Pipeline,以下内容会导致错误.

agent {
    dockerfile {
        dir 'path/to/dockerfileDir'
        label 'docker-nodes'
        args "-v ${pwd(tmp: true)}:/home/jenkins/.gradle"
    }
}
Run Code Online (Sandbox Code Playgroud)

控制台日志如下所示.

$ docker run -t -d -u 1000:1000 -v org.jenkinsci.plugins.pipeline.modeldefinition.ClosureModelTranslator@34a240ba:/home/jenkins/.gradle ...

java.io.IOException: Failed to run image 'e3747815ce1fc12012be2114aa26b6b1ec8a0492'. Error: docker: Error response from daemon: create org.jenkinsci.plugins.pipeline.modeldefinition.ClosureModelTranslator@34a240ba: "org.jenkinsci.plugins.pipeline.modeldefinition.ClosureModelTranslator@34a240ba" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intented to pass a host directory, use absolute path.
See 'docker run --help'.
    at …
Run Code Online (Sandbox Code Playgroud)

jenkins docker jenkins-pipeline

7
推荐指数
1
解决办法
2300
查看次数

标签 统计

docker ×1

jenkins ×1

jenkins-pipeline ×1