如何使用Declarative Jenkinsfile构建docker镜像

Mar*_*rkH 14 jenkins jenkins-pipeline

我是新手使用Jenkins ....

我正在尝试使用声明性Jenkinsfile自动生成图像(将在存储库中存储).我发现文档令人困惑(充其量).简单地说,我如何转换以下脚本示例(来自文档)

node {
    checkout scm
    def customImage = docker.build("my-image:${env.BUILD_ID}")
    customImage.push()
}
Run Code Online (Sandbox Code Playgroud)

到声明的Jenkins文件....

v.k*_*chy 22

您可以在声明性管道中使用脚本化管道块作为解决方法

pipeline {
    agent any
    stages {
        stage('Build image') {
            steps {
                echo 'Starting to build docker image'

                script {
                    def customImage = docker.build("my-image:${env.BUILD_ID}")
                    customImage.push()
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 使用这种方法,我只会得到“docker: not found”。 (4认同)
  • 我到处都想到了(包括你引用的链接).文档声明"对于大多数用例,在声明性管道中,脚本步骤应该是不必要的,但它可以提供一个有用的"逃生舱".所以我一直在寻找.至少对我来说这似乎很奇怪 - 这是首选方式(声明性的)省略了这样的功能. (3认同)

sho*_*ull 8

我正在使用以下方法:

steps {
   withDockerRegistry([ credentialsId: "<CREDENTIALS_ID>", url: "<PRIVATE_REGISTRY_URL>" ]) {
      // following commands will be executed within logged docker registry
      sh 'docker push <image>'
   }
}
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • CREDENTIALS_ID代表 Jenkis 中的密钥,您将凭据存储到您的 docker 注册表中。
  • PRIVATE_REGISTRY_URL代表您的私有 docker 注册表的 url。如果您使用的是 docker hub,那么它应该是空的。