Muffin Muffin - 4 months ago 36
Git Question

creating jenkins jobs with ansible

I'm working on a project to deploy a jenkins CI server on centos7 using ansible
And I'm having problems creating jenkins jobs from an xml template using ansible.

Everything works fine so far, but now i want to be able to create jobs, and give them some basic configuration from an xml file using ansible. My solution was the following command from jenkins-cli:

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


this works perfectly when entered manually in the centos7 box, but when i put it into ansible and run it:

- 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


it gives the following error message:

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


Does anyone know a solution to this?
As far as I can see I'm doing it properly(since the command works when not entered by ansible)

Answer

The command module doesn't support input and output redirection since it doesn't pass the command string to a shell. This is what its documentation says:

It will not be processed through the shell, so variables like $HOME and operations like "<", ">", "|", and "&" will not work (use the shell module if you need these features).

So:

- 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