`/在詹金斯体内的毒物中没有发现

2024-05-19 02:50:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试设置一个Jenkins管道,它在docker容器中运行tox。有一个已知的问题是,shebang线在Jenkins内部变得很长,two solutions are proposed。第一种方法是使用--workdir选择一条较短的路径。这个选项在原则上是可行的,但是我从Jenkins那里丢失了每个项目的自动唯一路径名。因此,我更愿意使用第二个选项TOX_LIMITED_SHEBANG。不幸的是,当被测包应该被安装时,这似乎失败了,并出现以下错误:FileNotFoundError: [Errno 2] No such file or directory: "b'/bin/sh'": "b'/bin/sh'"。我已经验证了/bin/sh实际上在docker容器中是可用的。jenkins文件如下所示:

node("docker") {
    // burnpanck/tox-base contains tox and many python versions
    docker.image('burnpanck/tox-base').inside {
        checkout scm
        stage('Matrix-test using Tox') {
            // verify that /bin/sh exists
            sh 'ls -al /bin'
            // the following does not work
            sh 'TOX_LIMITED_SHEBANG=1 tox -vv'
            // the following works 
            // sh 'tox --workdir=/var/jenkins_home/tox'
        }
    }
}

{2.3版本的python是从dockr生成的。让我有点惊讶的是“b'/bin/sh'”来自str-ing一个bytes实例。可能是tox实际上在试图运行一个名为sh',路径为b'/bin的程序吗?在

正在使用的tox.ini只调用pytest

^{pr2}$

来自tox(Jenkins控制台输出)的完整回溯如下:

py36 create: /var/jenkins_home/workspace/_debug_jenkins-long-shebang-L7UHBNCVPSOBSTKZ7COPFJBJLWR5XZXFIAD7TBGC4WQLVDLZYVQQ/.tox/py36
py36 inst: /var/jenkins_home/workspace/_debug_jenkins-long-shebang-L7UHBNCVPSOBSTKZ7COPFJBJLWR5XZXFIAD7TBGC4WQLVDLZYVQQ/.tox/dist/test_model-0.dev20180717.zip
ERROR: invocation failed (errno 2), args: [b'/bin/sh', '/var/jenkins_home/workspace/_debug_jenkins-long-shebang-L7UHBNCVPSOBSTKZ7COPFJBJLWR5XZXFIAD7TBGC4WQLVDLZYVQQ/.tox/py36/bin/pip', 'install', '/var/jenkins_home/workspace/_debug_jenkins-long-shebang-L7UHBNCVPSOBSTKZ7COPFJBJLWR5XZXFIAD7TBGC4WQLVDLZYVQQ/.tox/dist/test_model-0.dev20180717.zip'], cwd: /var/jenkins_home/workspace/_debug_jenkins-long-shebang-L7UHBNCVPSOBSTKZ7COPFJBJLWR5XZXFIAD7TBGC4WQLVDLZYVQQ
Traceback (most recent call last):
  File "/.pyenv/versions/3.6.6/bin/tox", line 11, in <module>
    sys.exit(cmdline())
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/session.py", line 39, in cmdline
    main(args)
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/session.py", line 45, in main
    retcode = Session(config).runcommand()
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/session.py", line 422, in runcommand
    return self.subcommand_test()
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/session.py", line 620, in subcommand_test
    self.installpkg(venv, path)
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/session.py", line 561, in installpkg
    venv.installpkg(path, action)
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/venv.py", line 277, in installpkg
    self._install([sdistpath], extraopts=extraopts, action=action)
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/venv.py", line 342, in _install
    self.run_install_command(packages=packages, options=options, action=action)
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/venv.py", line 314, in run_install_command
    redirect=self.session.report.verbosity < 2,
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/venv.py", line 427, in _pcall
    return action.popen(args, cwd=cwd, env=env, redirect=redirect, ignore_ret=ignore_ret)
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/session.py", line 153, in popen
    popen = self._popen(args, cwd, env=env, stdout=stdout, stderr=subprocess.STDOUT)
  File "/.pyenv/versions/3.6.6/lib/python3.6/site-packages/tox/session.py", line 248, in _popen
    env=env,
  File "/.pyenv/versions/3.6.6/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/.pyenv/versions/3.6.6/lib/python3.6/subprocess.py", line 1344, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: "b'/bin/sh'": "b'/bin/sh'"

Tags: inpypyenvtoxbinsessionlibpackages
1条回答
网友
1楼 · 发布于 2024-05-19 02:50:05

我们目前有an open bug来处理这个问题。TOX_LIMITED_SHEBANG当tox在python3下运行时被破坏。在

根本原因是缺少一个.decode(),而一个列表以混合的bytes和{}实例结束。在

I fix it之前的解决方法是使用tox和python2解释器,或者不要使用TOX_LIMITED_SHEBANG。在

相关问题 更多 >

    热门问题