Docker Pipeline プラグインで Jenkins を使用するときに気付きました。Docker コンテナでコマンドを実行するために Jenkins ファイルを作成すると、実行中のコンテナ内の同じパスにマップされた 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
私は、次のように Docker の Jenkinsfile に引数を指定してこれを上書きしようとしました。
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
ボリューム マッピングと作業ディレクトリを何らかの方法で上書きする方法はありますか?
ベストアンサー1
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
議論は効果がないからやめてcd /src/jekyll
、dir(path: '/srv/jekyll'){...}