为什么 Jenkins 没有为 docker 构建使用正确的镜像?

时间:2021-05-20 04:20:42

标签: docker jenkins

无论我尝试什么,我似乎都无法使用声明式管道在 docker 容器中使用正确的图像构建我的项目。

我已经验证了以下内容:

  • Jenkins 确实构建了正确的映像(基于日志中的消息)
  • 当我手动构建图像时,它构建正确
  • 在具有正确镜像的容器中构建项目时,构建成功
  • Jenkins 步骤确实在带有一些图像的容器中运行。

据我所知,Jenkins 只是使用了基础镜像,而不是正确的镜像,这是由我指定的 dockerfile 产生的。

我尝试过的事情:

让詹金斯弄清楚

pipeline {
    agent dockerfile

在顶层使用 docker:

pipeline {
    agent {
        dockerfile { 
            filename 'Dockerfile'
            reuseNode true
        }
    }
    stages {
        stage('configure') {
            steps {

每一步都使用docker

pipeline {
    agent none
    stages {
        stage('configure') {
            agent {
                dockerfile { 
                    filename 'Dockerfile'
                    reuseNode true
                }
            }
            steps {

缩写,由于例子的数量。在指定区域之外的任何地方都没有提到 Docker,只需移除 Docker 部件并使用常规代理就可以正常工作。

日志

日志没用。他们只是声明他们构建了镜像并验证它们存在,然后无法执行刚刚安装的命令(在这种情况下是介子)。

1 个答案:

答案 0 :(得分:2)

首先,我建议你阅读:

如果没有任何日志或更详细的设置说明,很难为您提供帮助。 我可以肯定地告诉你,第二次尝试是错误的,因为

<块引用>

reuseNodedockerdockerfile 有效,并且仅在用于单个 agentstage 时有效。

相反,我不确定第三次尝试如何工作:使用 agent none 您强制每个阶段都有一个 agent 部分,但在阶段的 agent 部分中您有reuseNode 选项设置为 true。这不是矛盾吗?如果这个节点不存在,你如何重用一个顶级节点?

我知道这不是答案,但在我看来停留在评论中也太长了。