我正试图让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作业中。