gpt4 book ai didi

docker - 如何在 Jenkins 声明式管道中从 docker hub 推送和拉取

转载 作者:IT老高 更新时间:2023-10-28 21:18:57 24 4
gpt4 key购买 nike

我正在从我的 jenkinsfile 管道中成功构建 docker 镜像,只需使用标准的“sh”命令。

我希望能够尝试从 docker/hub 拉取图像,如果失败(因为尚未保存在那里)构建它并将其推送到 docker hub。

显然我需要以某种方式存储 docker hub 的凭据并将它们提供给 docker login 命令。

我的问题是我很困惑。有 docker 管道插件,但我认为它们用于在 docker 容器内运行 jenkins 步骤 - 而不是我想要做的。还有许多示例似乎是脚本化的管道而不是声明性的。

用简单的“步骤”术语来说,我想我想做一些类似的事情

agent {
label 'pi'
}
steps {
sh 'docker login -u my-account -p xxxx'
sh 'docker pull my-account/image:version || (docker build -f dockerfile -t my-account/image:version && docker push my-account/image:version)'
....
}

但我也怀疑我可能需要做类似的事情

steps {
script {
withDockerRegistry([credentialsId: 'something', url: 'docker.io/my-account']) {
sh 'docker pull my-account/image:version || (docker build -f dockerfile -t my-account/image:version && docker push my-account/image:version)'
....
}
}

但我不想犯任何错误并拧紧目前运行良好的管道,除了这一点。

我的思路是否正确?

最佳答案

如果您有 Docker pipeline plugin您可以像这样创建和推送图像。

dir(config.buildFolder){
newImage = docker.build(${imageTag})
docker.withRegistry("https://${registryAddress}", '${credentialsId}'){
newImage.push("${variables.version}")

}

您可以像这样在容器中拉取并执行一些代码:

testbed = docker.image('${imageName}')
testbed.inside("-u root:root"){
echo 'executing build inside container'
sh 'dotnet restore'
}

这将自动将您创建容器的文件夹挂载为容器的根目录,以便您可以使用该数据(如构建应用程序)

关于docker - 如何在 Jenkins 声明式管道中从 docker hub 推送和拉取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43064998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com