簡體   English   中英

如何在 jenkinsfile 中為 docker.build 設置自定義上下文

[英]How to set custom context for docker.build in jenkinsfile

我正在嘗試為 jenkins 調整 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 都有效? 如果這是不可能的,有沒有人知道任何替代解決方案?

事實證明,我正在拉取 docker-pipeline-plugin 的先前版本 (1.6)。 有問題的函數已經更新 (1.7) 以允許第二個參數指定上下文之外的 Dockerfile 位置。

我的 Jenkinsfile 中更新的語句是:

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

這允許我的容器在不修改開發人員的 docker-compose 或 Dockerfiles 的預期上下文的情況下構建。

build() 方法默認在當前目錄中構建 Dockerfile。 這可以通過提供包含 Dockerfile 作為 build() 方法的第二個參數的目錄路徑來覆蓋,例如:

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

    testImage.inside {
        sh 'make test'
    }
}

要指定 dockerfile 的路徑,dir{} 塊對我有用

stage('docker build') {
            steps {
                dir('/path/to/docker/file/'){
                    script{
                        dockerImage = docker.build("imageName")
                    }
                }
            }
        }

最好的方法是使用 dir 塊,因為您需要執行 COPY 之類的操作,您必須在該位置

所以使用這個代碼

stage('Build') {
        steps {
            dir('/path/to/docker/file/'){ // put the path of Dockerfile
                script{
                    my_images = docker.build("Your_Image")
                }
            }
        }
    }

只需在 docker docker-compose上 Omnit context項,它就會默認為 Dockerfile 的位置。

以下語法應該有效: docker.build('ContainerTag''-f DockerFilePath Context' 示例:docker.build('quay.io/AppContianer:1.0.0' '-f dockerfileDir/Dockerfile.test dockerfileDir')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM