【问题标题】:How to upload file to jenkins and use it for build?如何将文件上传到詹金斯并将其用于构建?
【发布时间】:2016-11-07 23:42:58
【问题描述】:

我对 Jenkins 很陌生,我一直在尝试使用 curl 来构建我的工作。除了这个 curl 我想向 Jenkins 发送一个文件,该文件应该放在我工作区的特定目录中。我一直在谷歌搜索,但似乎找不到可以引导我解决问题的明确文档。请指导。我还查看了 Google 和 StackOverflow 上的其他一些文章,但找不到我要查找的内容。

curl -X POST JENKINS_URL/job/JOB_NAME/build \ --form file0=/home/abc.xml \ --form json='{"parameter": [{"name":"/workspace", "file":"file0"}]}'

我也试过了,好像没用。

【问题讨论】:

  • 什么不起作用?你得到什么错误? Jenkins 将文件保存到 WORKSPACE ;你需要复制它。
  • 实际上我在工作区中找不到文件,所以我无法确定它是否上传!另外,“名称”:“/workspace”对吗?我需要配置我的工作以获取文件参数吗?我已经这样做了,我已将位置 /workspace 作为文件位置放在配置中的文件参数中。
  • curl -X POST url/jobname/build --form file0=sample.xml -F json='{"parameter": [{"name":"sample.xml", "file" :"file0"}]}' 给我一个空指针异常
  • 文件参数名是什么?必须指定 {"name":"NAME OF PARAMETER",

标签: curl jenkins


【解决方案1】:

来自Jenkins文件参数帮助

指定上传文件在工作区中的相对位置 文件将被放置(例如,像“jaxb-ri/da​​ta.zip”)

上传的文件位置是相对于工作区的。 您需要在脚本中复制/移动它。名称部分是作业文件参数的名称。这不是您的文件名

这是来自脚本。该作业有一个名为 RECORDS_LIST 的文件参数。

curl -X POST  http://localhost:8080/job/builder/build \
             --form attachedfile=@c:/1.txt \
             --form json='{"parameter": [{"name":"RECORDS_LIST", "file":"attachedfile"}]}'

你的可能是

curl -X POST JENKINS_URL/job/JOB_NAME/build \ 
  --form file0=/home/abc.xml \ 
  --form json='{"parameter": [{"name":"YOUR_JOBS_FILE_ARGUMENT_NAME", "file":"file0"}]}'

请注意,jenkins command line api 可以处理文件上传

java -jar jenkins-cli.jar -s http://localhost:8080/ build builder \
      -p YOUR_JOBS_FILE_ARGUMENT_NAME=/home/abc.xml

[在看到 OP 自己的答案后编辑]

提醒

curl 命令中的文件名路径部分有'@'(注意路径前有@)。 jenkins cli 不需要它。发生此错误时,很难跟踪。

【讨论】:

  • 感谢您的回复。我理解了大部分内容,除了 YOUR_JOBS_FILE_ARGUMENT_NAME。让我解释一下我的理解,当我打开 jenkins 并配置作业以获取参数时,我选择文件参数并给它一个文件位置和描述,所以文件位置就是你的意思是 YOUR_JOBS_FILE_ARGUMENT_NAME?当我按照您指定的上述命令执行上述命令时,我得到空指针异常的原因可能是什么?对不起,我问的是非常基本的问题,但詹金斯是我昨天有生以来第一次接触到的东西。感谢您的帮助。
  • 解决了这个问题。感谢您的所有帮助。
  • 很高兴知道。请按照stackoverflow.com/help/someone-answers 的说明接受回答
  • 如您所见,Jenkins cli 更加直观。
  • 这很直观,但我希望在我的项目中保持较低的依赖关系,所以我们使用 curl :)
【解决方案2】:

Jayan 所说的一切都是正确的。对于像我这样的初学者,我只是让它变得更简单。 记住: @ 符号在我们的 curl url 中非常重要。此外,YOUR_JOBS_FILE_ARGUMENT_NAME 是您要存储文件的路径,以及文件的名称和扩展名。如果将 abcd.xml 放在文件参数的文件位置,它会将 abcd.xml 保存在工作区的根目录中,如果要将其放在文件夹 xyz 中,则应将文件位置写入您的 xyz/abcd.xml在 jenkins 上配置作业时文件参数的文件位置,并确保在 curl 中使用相同的参数。所以如果你想把 abc.xml 放到 jenkins 上的 xyz/abcd.xml,请使用命令 as :

curl -X POST JENKINS_URL/job/JOB_NAME/build \ 
  --form file0=@/home/abc.xml \ 
  --form json='{"parameter": [{"name":"xyz/abcd.xml", "file":"file0"}]}'

这是非常基本的东西,但这是我偶然发现的。

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 2015-02-20
    • 2017-03-02
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2021-07-30
    相关资源
    最近更新 更多