akc*_*c42 10 jenkins docker jenkins-pipeline
我正在使用标准的"sh"命令成功构建来自我的jenkinsfile管道上的docker镜像.
我希望能够尝试从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)'
....
}
Run Code Online (Sandbox Code Playgroud)
但我也怀疑我可能需要做类似的事情
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)'
....
}
}
Run Code Online (Sandbox Code Playgroud)
但我不想犯任何错误,并且除了这一点之外,还要搞一个目前工作正常的管道.
我是沿着正确的路线吗?
如果你有Docker管道插件,你可以像这样创建和推送图像.
dir(config.buildFolder){
newImage = docker.build(${imageTag})
docker.withRegistry("https://${registryAddress}", '${credentialsId}'){
newImage.push("${variables.version}")
}
Run Code Online (Sandbox Code Playgroud)
您可以在容器内拉取并执行一些代码,如下所示:
testbed = docker.image('${imageName}')
testbed.inside("-u root:root"){
echo 'executing build inside container'
sh 'dotnet restore'
}
Run Code Online (Sandbox Code Playgroud)
这将自动挂载您创建容器的文件夹作为容器的根目录,以便您可以使用该数据(如构建应用程序)
小智 3
我也在研究同样的问题。我希望从我的 Dockerhub 存储库中提取 Docker 映像并使用它们执行一些测试。我已按照此处显示的步骤设法使我的管道正常工作。
https://gist.github.com/jglick/0aa389c053196e38e2a1
| 归档时间: |
|
| 查看次数: |
20261 次 |
| 最近记录: |