获取 docker 容器中当前 .py 文件的绝对路径

Get absolute path of current .py file in docker container

我正在尝试获取 .py 文件的绝对路径以访问位于同一目录中的其他文件 (/files)。作为 jenkins 管道的一部分,所有文件都安装在 docker 容器中。在 .py 文件中,我使用以下语法获取绝对路径:

    from pathlib import Path

    current_dir = f"{Path(__file__).resolve().parent}/result.txt"

文件存在于容器中,但我收到以下错误:

No such file or directory: '/tmp/.tmpAA7qY3/files/result.txt'

Jenkins 文件如下所示:

node('docker') {
    docker.image("circleci/python:3.7-buster").inside('--user root:root'+' -v /var/run/docker.sock:/var/run/docker.sock') {
        stage("Scan dependencies") {
            checkout scm
            sh 'poetry run pytest'
        }
    }
}

Jenkins 将为每个特定的构建实例创建一个名为 workspace 的新临时文件夹。因此,您的代码确实在 /tmp/.tmpAA7qY3 中。由于您在 tmp 文件夹中 运行,因此 __file__ 将解析为该路径并不奇怪。

您需要找出您正在搜索的文件相对于您的临时文件夹的确切位置,或者作为绝对路径。如果您无法控制文件的创建方式,最简单的方法是执行 find / -name result.txt 并获取结果。

如果文件是在 Jenkins 管道流中的另一个阶段创建的,则文件可能不在容器中,因为每个阶段都可以创建自己的容器,如 here 所述。