[英]docker.build() in Jenkins pipeline with two tags
[英]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.