docker - 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 主机。希望这对暂时有所帮助。
解决方案
推荐阅读
- django - Django 中的 SMTPRecipientsRefused 发送电子邮件
- tensorflow - 如何在 tensorfow 中训练变量以及权重和偏差
- javascript - 如果没有搜索结果则显示消息
- uwp - 尝试旁加载/安装桌面桥应用程序时出错 - 系统找不到指定的文件 0x80070002
- python - 根据权重和偏差选择神经元
- r - 闪亮的 selectInput 从下拉列表中选择所有
- vba - 尝试通过 VBA 脚本将重复的附件保存到我的 PC 导致 Outlook 崩溃
- c++ - std::locale 取得所有权
- php - phorum 中基于 PHP cookie 的会话交换
- javascript - 如何从 node.js 中的该函数调用结构内的函数?