我正在开发一个项目,使用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输入的情况下有效)
答案 0 :(得分:8)
我使用ansible管理我的jenkins CI / CD管道和设置,我非常依赖可用的库(groovy DSL,python jenkins-job-builder)并使用jinja2模板jenkins XML配置的内容。 我被要求展示在本地聚会上可以用ansible做些什么,并且已经开始编写一些代码,我将在新一年的聚会中提供和分享。 我认真地认为这些东西可以帮助你很多,我目前在我当前的项目中使用这个设置,并且无法想象以任何其他方式管理jenkins。
答案 1 :(得分:4)
command module不支持输入和输出重定向,因为它没有将命令字符串传递给shell。这就是它的文档所说的:
它不会通过shell处理,所以像$ HOME这样的变量和像“&lt;”,“&gt;”,“|”和“&amp;”这样的操作不起作用(如果您需要这些功能,请使用shell module。)
所以:
- 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
答案 2 :(得分:0)
您可以通过执行shell来使用shell重定向。例如,命令&#39; sh&#34; echo test&gt; hello.txt的&#34;&#39;将按预期工作。只需用&#39; / bin / sh&#34; java ...&gt; ...&#34;&#39;等包装整个命令。