5

我正在开发一个项目,以使用 ansible 在 centos7 上部署 jenkins CI 服务器并且我在使用 ansible 从 xml 模板创建 jenkins 作业时遇到问题。

到目前为止一切正常,但现在我希望能够创建作业,并使用 ansible 从 xml 文件中为它们提供一些基本配置。我的解决方案是来自 jenkins-cli 的以下命令:

sudo java -jar jenkins-cli.jar -s http://localhost:8080 create-job Job_test1 < Job_test1.xml

当在centos7框中手动输入时,这非常有效,但是当我将它放入ansible并运行它时:

- name: create jenkins jobs with xml files
  sudo: yes
  command: "java -jar {{ jenkins.cli_dest }} -s http://localhost:8080 create-job {{ item.name }} < {{ jenkins_dest }}/{{ item.xml_name }}"
  with_items: jenkins_jobs

它给出以下错误消息:

stderr: Too many arguments: <
java -jar jenkins-cli.jar create-job NAME
Creates a new job by reading stdin as a configuration XML file.

有谁知道解决这个问题?据我所见,我做得很好(因为该命令在未由 ansible 输入时有效)

4

3 回答 3

8

我使用 ansible 管理我的 jenkins CI/CD 管道和设置,并且我严重依赖可用的库(groovy DSL、python jenkins-job-builder)并使用 jinja2 模板化 jenkins XML 配置的内容。我被要求在本地聚会上展示 ansible 可以做什么,并且一直在编写一些我将在新的一年的聚会上交付和分享的代码。我真的认为这些东西可以帮助你很多,我目前在我当前的项目中使用这个设置,无法想象以任何其他方式管理 jenkins。

https://github.com/Azulinho/ansible-jenkins-showcase

于 2014-11-23T20:47:37.467 回答
4

command 模块不支持输入和输出重定向,因为它不将命令字符串传递给 shell 。这就是它的文档所说的:

它不会通过 shell 处理,因此 $HOME 等变量和“<”、“>”、“|”和“&”等操作将不起作用(如果您需要这些功能,请使用shell 模块)。

所以:

- name: create jenkins jobs with xml files
  sudo: yes
  shell: "java -jar {{ jenkins.cli_dest }} -s http://localhost:8080 create-job {{ item.name }} < {{ jenkins_dest }}/{{ item.xml_name }}"
  with_items: jenkins_jobs
于 2014-11-19T10:51:27.823 回答
0

您可以通过执行 shell 来使用 shell 重定向。例如,命令 'sh "echo test > hello.txt"' 将按预期工作。只需用'/bin/sh "java ...>..."'之类的东西包装整个命令。

于 2016-08-02T06:30:17.450 回答