Jenkins Dockerfile声明性流水线:如何获取构建的镜像标签

114次阅读
没有评论

问题描述

在使用Jenkins声明性流水线时,希望能够获取使用dockerfile agent生成的镜像标签。用户的Jenkinsfile还不完整,因为他还需要部署步骤。通常,人们希望添加一个步骤将镜像推送到Dockerhub。尽管我不知道如何做到这一点,但我想要的是不同的:我想要重新标记本地构建的镜像,以我选择的名称。这是因为这是一个业余项目,我的Jenkins和生产服务器是相同的。问题是我不知道如何获取动态生成的镜像ID,以便用于docker tag命令。(然后接下来要做的是用新的镜像替换旧的运行镜像,但我可能可以自己处理这个。)以下是我的Jenkinsfile:

pipeline {
    agent {
        dockerfile {
            args '--network szeremi -e DB_HOST=mysql -e APP_ENV=testing'
        }
    }
    stages {
        stage('Run tests') {
            steps {
                sh 'cd /var/www && php artisan migrate:fresh && vendor/bin/phpunit'
            }
        }
    }
}

请帮助我使用Jenkins声明性流水线重新标记我的dockerfile构建的镜像。

解决方案

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

方案1

根据你的需求,你可以在Jenkins声明性流水线中使用环境变量来获取镜像标签,并将其用于你的镜像标签中。以下是一个示例:

pipeline {
  environment {
    registry = "docker_hub_account/repository_name"
    registryCredential = 'dockerhub'
  }
  agent any
  stages {
    stage('Building image') {
      steps{
        script {
          docker.build registry + ":$BUILD_NUMBER"
        }
      }
    }
  }
}

在上面的示例中,我们定义了一个环境变量registry,用于存储Dockerhub的仓库名称。然后,在Building image阶段中,我们使用docker.build命令构建镜像,并将镜像标签设置为registry + ":$BUILD_NUMBER"。这样,你就可以动态获取镜像标签,并将其用于重新标记镜像。

方案2

如果你使用的是dockerfile agent,那么你可以尝试使用additionalBuildArgs参数来设置镜像标签。以下是一个示例:

pipeline {
    agent {
        dockerfile {
            additionalBuildArgs '-t mytag'
        }
    }
}

在上面的示例中,我们使用additionalBuildArgs参数将镜像标签设置为mytag。这样,你就可以在构建镜像时指定自定义的标签。
请注意,这些解决方案可能会因Jenkins版本或插件版本的不同而有所差异。如果遇到问题,请参考相关文档或向Jenkins社区寻求帮助。

正文完