【问题标题】:How to use file parameter in jenkins如何在詹金斯中使用文件参数
【发布时间】:2017-02-14 11:13:57
【问题描述】:

我正在 jenkins 中执行参数化构建以计算编号。文件中具有 1 个文件参数的行数。它的文件位置是pqr。脚本文件名为linecount.sh,保存在远程服务器上。当我尝试使用命令 sh linecount.sh 文件名执行它时,它在 jenkins 中完美运行。但是当我从参数中删除文件名并执行与参数化构建相同的脚本时,它在控制台上显示以下错误:

Started by user Prasoon Gupta
[EnvInject] - Loading node environment variables.
Building in workspace users/Prasoon/sample_programs
Copying file to pqr
[sample_programs] $ /bin/sh -xe /tmp/hudson3529902665956638862.sh
+ sh linecount.sh
PRASOON4
linecount.sh: line 15: parameterBuild.txt: No such file or directory
Build step 'Execute shell' marked build as failure
Finished: FAILURE

我正在从本地机器上传文件 (parameterBuild.txt)。为什么会出现这个错误?

我的疑问是在 shell 脚本中,我使用了 $1 的参数。当我将文件作为参数时,如何引用它。

【问题讨论】:

  • 确保参数文件按预期插入到工作区中,例如在你的 shell 命令中执行 ls -l
  • 谢谢,但我想直接从我的本地机器上传它,想让我的工作对用户更友好。
  • 是的,明白这一点。但是为了隔离问题,如果在作业配置中将ls -l 作为shell 命令的一部分运行会发生什么?例如。它是否列出了parameterBuild.txt 或任何其他文件?
  • 不,它没有在此处列出 parameterBuild.txt,但在此处创建了一个与我的文件位置的逻辑名称相同的新文件(此处为 pqr),其中包含 parameterBuild.txt 中的所有内容。
  • 啊,我明白了,我的错,误读了你的一些问题。我已经发布了答案。

标签: jenkins


【解决方案1】:

上传的文件不会保留与本地计算机上相同的名称。它将以文件参数设置中指定的File location 参数命名: 在此示例中,我将在我的工作区根目录中获得一个名为 file.txt 的文件,无论我在计算机上如何调用它。 因此,如果我现在构建我的作业并在参数对话框中输入以下内容(注意我的本地文件名是 table.html):

然后我在日志中得到以下信息(我有一个构建步骤,它执行ls -l):

Building on master in workspace /var/lib/jenkins/workspace/fs
Copying file to file.txt
[fs] $ /bin/sh -xe /tmp/hudson845437350739055843.sh
+ ls -l
total 4
-rw-r--r-- 1 jenkins jenkins 292 Feb 15 07:23 file.txt
Finished: SUCCESS

请注意,table.html 现在称为 file.txt,例如我输入的内容为File location

所以在你的情况下,命令应该是:

sh linecount.sh pqr

【讨论】:

  • @JonS 感谢您的澄清。另外,从作业 A 中,我想在远程服务器中触发作业 B。作业 B 已参数化并将文件作为输入。我使用参数化远程触发插件。如果我从作业 A 的外部文件字段的加载参数中传递文件,它在作业 B 中无法正确读取。有什么建议吗??
  • @Santhosh 抱歉,我不知道,我建议您单独发布一个问题
  • 这个文件参数是否可以强制填写。这样,如果不上传文件,构建应该会失败。
  • @vishal,可能是一个单独的问题,但是,只是在黑暗中开枪,我认为您只需检查文件是否存在,如果脚本不失败
【解决方案2】:

自古以来就有一个错误导致无法使用fileParameter

【讨论】:

  • 请注意,配置所需的插件和签名后,cmets 中有一个解决方案。类似def inputFile = input message: 'Upload file', parameters: [file(name: 'data.zip')] unzip dir: '', glob: '', zipFile: inputFile.remote
  • 您的第一个链接上的 cmets 说 2021 年 2 月为此功能发布了一个插件:plugins.jenkins.io/file-parameters
【解决方案3】:

这个问题有一个解决方法https://github.com/janvrany/jenkinsci-unstashParam-library 并在管道脚本中执行:

library "jenkinsci-unstashParam-library"
node {
  def file_in_workspace = unstashParam "file"
  sh "cat ${file_in_workspace}"
}

【讨论】:

    【解决方案4】:

    如果它与 Free-Style 工作有关,并且如果您的配置与此类似 - https://i.stack.imgur.com/vH7mQ.png,那么您只需运行 do sh linecount.sh ${pqr} 即可获得所需的内容?

    【讨论】:

      猜你喜欢
      • 2020-03-30
      • 2020-06-09
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多