在使用Jenkins和Docker Pipeline插件时,我注意到了这一点。当我创建一个Jenkins文件来在docker容器中运行命令时,它总是创建Jenkins工作区目录的卷映射,映射到运行容器中的相同路径。它还会创建一个具有相同路径的工作目录。
docker run -t -d -u 127:134 -w /var/lib/jenkins/workspace/DockerTest
-v /var/lib/jenkins/workspace/DockerTest:/var/lib/jenkins/workspace/DockerTest:rw,z
-v /var/lib/jenkins/workspace/DockerTest@tmp:/var/lib/jenkins/workspace/DockerTest@tmp:rw,z
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
jekyll/jekyll:builder cat我试图通过在我的Jenkinsfile中为Docker提供参数来覆盖它,如下所示:
pipeline {
agent {
docker {
image 'jekyll/jekyll:builder'
args '-v $HOME:/srv/jekyll -w /srv/jekyll'
}
}
stages {
stage('Test') {
steps {
sh 'cd /srv/jekyll && ls -l'
}
}
}
}这似乎只是将选项放在Docker命令的前面,并且workdir和卷映射被默认设置覆盖:
docker run -t -d -u 127:134
-v $HOME:/srv/jekyll
-w /srv/jekyll
-w /var/lib/jenkins/workspace/DockerTest
-v /var/lib/jenkins/workspace/DockerTest:/var/lib/jenkins/workspace/DockerTest:rw,z
-v /var/lib/jenkins/workspace/DockerTest@tmp:/var/lib/jenkins/workspace/DockerTest@tmp:rw,z
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
-e ********
jekyll/jekyll:builder cat有没有什么方法可以覆盖卷映射和工作目录?
发布于 2019-03-27 19:35:05
您可以结合使用docker {}和dir {}来控制工作目录:
pipeline {
agent {
docker {
image 'jekyll/jekyll:builder'
args '-v $HOME:/srv/jekyll'
}
}
stages {
stage('Test') {
steps {
dir(path: '/srv/jekyll') {
sh 'ls -l'
}
}
}
}
}我放弃了-w参数,因为它没有效果,并用dir(path: '/srv/jekyll'){...}替换了cd /src/jekyll
发布于 2019-11-12 23:37:51
我们有一个相同的要求,使用不同于容器中默认工作目录的工作目录,在检查之后,它被理解为现在是不可能的。有关更多详细信息,请查看此处JENKINS-41474、JENKINS-35406、JENKINS-33510
另一种方法是使用dir("path_to_work") { sh ' '},但它也不起作用。因此,唯一的方法是使用args将卷挂载到容器中,并使用其中的更改目录命令运行所有命令
pipeline {
agent {
docker {
image 'alpine:3.7'
args '-v $HOME/src:/src'
}
}
stages {
stage('Build') {
steps {
sh 'cd /src ; ./run_build.sh'
}
}
}
}发布于 2018-05-24 15:20:51
@Nagri不幸的是,我仍然不能指定工作目录和卷映射。
但我可以以root身份运行jekylll。
这并不理想,但至少它是有效的。
pipeline {
agent {
docker {
image 'jekyll/jekyll:builder'
args '-u root'
}
}
stages {
stage('Test') {
steps {
sh 'mkdir -p _site'
sh 'jekyll build'
}
}
}
}https://stackoverflow.com/questions/49069538
复制相似问题