Jenkins无法在批处理文件中运行Poetry.手动运行时有效



我正试图让Jenkins运行一个.bat文件,该文件包含对Poetry的调用(用于包管理(。

然而,当通过Jenkins运行这个.bat文件时,我得到了一个""诗歌"不被识别为内部或外部命令、可操作程序或批处理文件"错误

我相信这是由于.bat文件在尝试运行";称诗歌为"检查";命令

手动运行.bat文件时会成功运行。

詹金斯身上有什么明显的特征是我在这里遗漏的吗?

我知道有一种替代方法可以通过直接命令将诗歌嵌入詹金斯。然而,这个项目即将移交给其他人,他们将无法维持。

我已经复制了下面的关键代码(调用.bat文件的Jenkins代码、.bat文件中的代码以及Jenkins的错误输出(。

Jenkins代码(具有默认设置的标准管道(:

pipeline {
agent any
stages {
stage('Main') {
steps {
bat 'E:\project-folder\project_run.bat'
}
}
}
}

蝙蝠文件代码:

@echo off
cd /d "E:project-folder"

call poetry check && (
echo poetry checked
) || (
echo Problem with poetry
EXIT /B
)
echo Installing prod packages
call poetry install --no-dev && (
echo Production packages successfully installed
) || (
echo Problem installing packages to environment
EXIT /B
)
call python local-program.py
EXIT /B
)

Jenkins错误:

C:\Windows\system32\config\systemprofile\AppData\Local\Jenkins.Jenkins\workspace[Pipeline_Name]>E: \project文件夹\project_run.bat正在移动到项目目录"诗歌"不被认为是一种内部或外部命令,可操作程序或批处理文件。诗歌问题

Windows正在您指定的路径上查找可执行文件。如果运行的命令没有路径,Windows会在环境变量path中指定的所有目录中查找该命令/可执行文件。

很可能你的Jenkins运行的路径设置与你的交互式shell不同。

你能做什么:

  • 指定要在Jenkins中引发的命令的完整路径
  • 在运行命令之前,在Jenkins作业中设置PATH变量
  • 在调用Jenkins之前设置PATH变量

除了目录,Windows还必须检查扩展。如果运行poetry,Windows可能必须找到poetry.com、poetry.exe、poetry.bat或poetry.cmd。我怀疑其中一个文件位于E:\project文件夹中。要了解Windows检查哪些文件以及首选项,请查看环境变量PATHEXT

因此,为了更好地理解这些差异,可以在没有参数的情况下运行命令set。在命令行中执行此操作,并将相同的命令添加到Jenkins作业中。

最新更新