環境
CentOS Linux release 7.5.1804 (Core) DockerのHostマシン
Jenkins 2.138.1
Docker Commons Plugin
Docker Pipeline
postgres 11(公式のdocker-image latest)
やりたかったこと
他のDBサーバからデータを持って来てダンプファイルを作りたかった。
動いたJenkinsfile設定
.pgpassを任意のパス(ここではhostの/ci/app/hoge)に置き、そのパスをvオプションでマウント、さらにマウントしたファイル(ここでは/root/.pgpass)をeオプションで指定。
pipeline {
agent none
stages{
stage('DBコピーフェーズ') {
agent {
docker {
image 'postgres'
args '-v /ci/app/hoge:/root -e PGPASSFILE=/root/.pgpass'
}
}
steps {
sh 'pg_dump -h ホスト名 -p 5432 -U ユーザ名 DB名 > /root/test.sql'
sh 'echo DBコピー'
}
}
}
}
動かなかった設定
.pgpassを任意のパス(ここではhostの/ci/app/hoge)に置き、そのパスをホームディレクトリとして環境変数で指定。
args '-v /ci/app/hoge:/home/ciuser -e HOME=/home/ciuser'
postgresコンテナ内の環境変数にはHOMEが反映されているが.pgpassは読み込まれなかった。
多分
getpwuidで実行ユーザ(uid1000)で環境変数ではなく/etc/passwdからホームを取得しようとする
postgresコンテナにはuid1000のユーザはいないからホームディレクトリが取得できない(echoしてみたら/で表示されてはいた)
/には.pgpassが無いからエラー
という流れと思うが調査は途中でやめた。