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
ボリュームマッピングと作業ディレクトリを上書きする方法はありますか?
_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'){...}
に置き換えました
@Nagri残念ながら、まだ作業ディレクトリとボリュームマッピングを指定できませんでした。
しかし、私はrootとしてjekylllを実行できました。
理想的ではありませんが、少なくとも機能します。
「」
pipeline {
agent {
docker {
image 'jekyll/jekyll:builder'
args '-u root'
}
}
stages {
stage('Test') {
steps {
sh 'mkdir -p _site'
sh 'jekyll build'
}
}
}
}
「」
コンテナ内のデフォルトのディレクトリとは異なる作業ディレクトリを使用するという同じ要件がありましたが、現在のところ不可能であることを確認した後、確認しました。詳細はこちらをご覧ください JENKINS-41474 、 JENKINS-35406 、 JENKINS-3351
もう1つの方法は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'
}
}
}
}