问题描述
在使用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社区寻求帮助。