首页 > 解决方案 > Jenkinsfile 代理找不到源代码文件

问题描述

我有一个在 Docker 容器中运行的 Jenkins 管道。我的管道由三个阶段组成:构建、测试和交付。每个阶段都使用代理,构建和测试阶段完美运行。但是,由于某种原因,交付阶段失败,因为cdrx/pyinstaller-linux:python2运行该pyinstaller命令的代理无法在已安装的卷中找到源代码。我验证了该文件确实存在并且位于正确的位置。当作业进入第 3 阶段“交付”时,它无法找到 add2vals.py。知道为什么会这样,我感到困惑、恼怒、厌倦。错误信息:

Jenkinsfile 流水线脚本

pipeline {
agent none
options {
    skipStagesAfterUnstable()
}
stages {
    stage('Build') {
        agent {
            docker {
                image 'python:2-alpine'
            }
        }
        steps {
            sh 'python -m py_compile sources/add2vals.py sources/calc.py'
            stash(name: 'compiled-results', includes: 'sources/*.py*')
        }
    }
    stage('Test') {
        agent {
            docker {
                image 'qnib/pytest'
            }
        }
        steps {
            sh 'py.test --junit-xml test-reports/results.xml sources/test_calc.py'
        }
        post {
            always {
                junit 'test-reports/results.xml'
            }
        }
    }
    stage('Deliver') { 
        agent any
        environment { 
            VOLUME = '$(pwd)/sources:/src'
            IMAGE = 'cdrx/pyinstaller-linux:python2'
        }
        steps {
            dir(path: env.BUILD_ID) { 
                unstash(name: 'compiled-results') 
                sh "docker run --rm -v ${VOLUME} ${IMAGE} 'pyinstaller -F add2vals.py'"
            }
        }
        post {
            success {
                archiveArtifacts "${env.BUILD_ID}/sources/dist/add2vals" 
                sh "docker run --rm -v ${VOLUME} ${IMAGE} 'rm -rf build dist'"
            }
        }
    }
}

}

编辑 经过大约两天的几乎全职研究和尝试解决这个问题,我一直无法解决。到目前为止,我认为这很可能是 Docker 中的一个错误。已安装卷中的文件在它们安装到简单明了的容器上的路径中是不可见的。所以请注意,当我有有用的东西时,会坚持下去并更新。如果您遇到这种情况,我强烈建议您只使用 Dind 作为安装在 jenkins 容器上的 Docker CLI 的对立面。请注意,这适用于使用 Linux 容器安装 Docker Desktop 的 Windows 10 主机。希望这对暂时有所帮助。

标签: dockerjenkinsjenkins-pipeline

解决方案


推荐阅读