環境
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が無いからエラー
という流れと思うが調査は途中でやめた。