Jenkins コンテナ:シークレットファイルで Maven のプロキシ設定を渡す
Jenkins のシークレットファイルをバインドし、コンテナ内で見えるパスを mvn -s に渡してビルドのプロキシ設定を行います。
Maven のリポジトリプロキシは settings.xml に属します。Jenkins ビルドがすでに Maven コンテナ内で実行されている場合は、そのファイルをそこで動作する Maven プロセスに渡します。
意図した settings.xml 全体を maven-proxy-settings という名前の Jenkins Secret file 資格情報として保存します。既存のコンテナステージのステップ内で:
withCredentials([
file(credentialsId: 'maven-proxy-settings', variable: 'MAVEN_SETTINGS')
]) {
sh 'mvn -s "$MAVEN_SETTINGS" -B verify'
}
バインドは一時的なファイルパスを提供します。単一引用符の Groovy 文字列は変数展開をシェルに委ね、シェルの二重引用符はパスを 1 つの引数として保持します。Maven の -s オプションはそのファイルをユーザー設定として選択し、-B はバッチモードを選択します。
資格情報ファイルの proxies セクションには、ビルドのプロキシホスト、ポート、認証、nonProxyHosts を、その他の必要なユーザー設定とともに含められます。Maven のプロキシ除外リストは縦棒をホストパターン間に使います。
ファイルは Maven が動作する場所に存在する必要がある
Docker Pipeline では、エージェントとコンテナに互換性のあるマウント済みファイルシステムが必要で、バインドされたパスが実行コンテナ内で読めるようにします。手動で起動する docker run では明示的なファイルマウントが必要で、可能なら読み取り専用にし、Maven にはコンテナ側のパスを渡す必要があります。ホスト側のパスを環境変数として渡すだけではファイルは利用できません。
作業ディレクトリの変更は資格情報バインドのブロック内に留め、シークレットファイルが閲覧可能なサブディレクトリのワークスペースに置かれないようにします。ファイルをビルドログに出力したり、永続イメージにコピーしたりしないでください。
これはユーザー設定を選択します。Maven のグローバル設定も関与できるため、継承されたミラーやその他の設定が解決に影響し続ける場合は両方を確認してください。