在 Jenkinsfile 中使用 buildx 生成特定平台的构建

137次阅读
没有评论

问题描述

目前在 Jenkinsfile 中使用 docker.build() 声明式地构建 Docker 镜像。现在他需要为 ARM64 生成特定平台的构建。为了实现这个目的,他需要使用 docker buildx build --platform linux/arm64 ... 命令。他想知道是否有办法继续使用 docker.build() 语法来生成特定平台的镜像,或者是否需要重写语法,如果需要的话,应该如何重写。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

Jenkins的 Docker Pipeline 插件目前还不支持 buildx(可能会在未来支持)。如果你希望支持这个功能,可以在相关的问题上投票,以帮助推动这个功能的开发。如果有兴趣,可以在该问题上添加你的投票:JENKINS-61372

不过,你仍然可以通过其他方式来实现生成特定平台的构建。Jeremie Drouet 在他的博客文章 “Multi-arch build and images, the simple way” 中介绍了一种方法,该方法首先构建镜像,然后创建一个 manifest 来将它们链接在一起。

另外,Github 上的用户 bgulla 在他的 gist 中提供了一个使用 docker.withRegistry() 在流水线中尽可能完成构建的示例。然后使用 sh 命令来创建和推送 manifest。

方案2

如果你不想使用第三方工具,你可以直接使用 sh 命令来执行 docker buildx 命令。以下是一个示例:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    sh 'docker buildx build --platform linux/arm64 ...'
                }
            }
        }
    }
}

在这个示例中,我们在流水线的 Build 阶段使用 sh 命令来执行 docker buildx build 命令,并指定 --platform linux/arm64 参数来生成特定平台的构建。

请注意,这种方法需要你的 Jenkins 环境中已经安装了 buildx 插件,并且已经配置好了相应的构建环境。

以上是两种实现在 Jenkinsfile 中使用 buildx 生成特定平台构建的方法。你可以根据自己的需求选择适合的方法来实现。

正文完