web-dev-qa-db-ja.com

jenkinsfileでdocker.buildのカスタムコンテキストを設定する方法

私はジェンキンスのDockerビルドを適応させようとしています。私はdocker-composeファイルに従い、各コンテナーを作成してそれらをリンクするJenkinsfileを作成しています。私が実行している問題は、docker-composeファイルがDockerfileの場所ではないコンテキストを宣言していることです。私が理解している限り、jenkinsは、Dockerfileがある場所にコンテキストを設定します。これにより、jenkinsfileファイルまたはdocker-composeファイルが構築されているかどうかに応じて、コピーされるファイルが異なる相対ロケーションに配置されます。

フォルダ構造は次のとおりです。

workspace
    |-docker
        |-db
           |-Dockerfile
           |-entrypoint.sh

これは、Dockerfileが問題のファイルのCOPY命令を宣言する方法です

COPY docker/db/entrypoint.sh /

これが私のjenkinsfileがファイルを構築する方法です。私の知る限り、そのディレクトリにコンテキストを配置します

docker.build("db", "${WORKSPACE}/docker/db")

docker-composeファイルは次のように宣言します。

db:
build:
  context: .
  dockerfile: docker/db/Dockerfile

コンテキストをプロジェクトのルートに置きます。

Jenkinsfileにdocker-composeファイルと同じコンテキストを使用するように指示して、DockerfileのCOPY命令を変更せずに、Jenkinsとdocker-composeの両方に対して有効にする方法はありますか?それが不可能な場合、誰か他の解決策を知っていますか?

14
Julian

以前のバージョン(1.6)のdocker-pipeline-pluginを取得していたことがわかりました。問題の関数は更新され(1.7)、2番目のパラメーターでコンテキスト外のDockerfileの場所を指定できるようになりました。

私のJenkinsfileの更新されたステートメントは次のとおりです。

return docker.build("db", "-f docker/db/Dockerfile .")

これにより、開発者のdocker-composeまたはDockerfilesの予想されるコンテキストを変更せずに、コンテナーをビルドできます。

24
Julian

Build()メソッドは、デフォルトで現在のディレクトリにDockerfileをビルドします。これは、build()メソッドの2番目の引数としてDockerfileを含むディレクトリパスを指定することでオーバーライドできます。次に例を示します。

node {
    checkout scm
    def testImage = docker.build("test-image", "./dockerfiles/test") 

    testImage.inside {
        sh 'make test'
    }
}
0
andy.wang

contextアイテムをdocker-composeなので、デフォルトではDockerfileの場所になります。

0
Ohmen

次の構文が機能するはずです:docker.build( 'ContainerTag' '-f DockerFilePath Context'の例:docker.build( 'quay.io/AppContianer:1.0.0' '-f dockerfileDir/Dockerfile.test dockerfileDir')

0
user6058180