создание рабочих мест Дженкинса с помощью ansible


Я работаю над проектом по развертыванию сервера Jenkins CI на centos7 с использованием ansible И у меня возникли проблемы с созданием заданий Дженкинса из xml-шаблона с использованием ansible.

Пока все работает нормально, но теперь я хочу иметь возможность создавать задания и давать им некоторую базовую конфигурацию из xml-файла с помощью ansible. Моим решением была следующая команда от 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)

3 5

3 ответа:

Командный модуль не поддерживает перенаправление ввода и вывода, так как он не передает командную строку в оболочку. Вот что говорится в его документации:

Он не будет обрабатываться через оболочку, поэтому переменные, такие как $HOME и операции, такие как "", "|", и " & " не будет работать (используйте модуль оболочки , Если вам нужны эти функции).

Итак:

- 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

Я управляю своими конвейерами Jenkins CI / CD и настройкой с помощью ansible, и я в значительной степени полагаюсь на доступные библиотеки (groovy DSL, python jenkins-job-builder) и шаблон кишки конфигурации Jenkins XML с помощью jinja2. Меня попросили продемонстрировать, что можно сделать с ansible на местном митапе, и я работал над некоторым кодом, который я буду доставлять и делиться на этом митапе в новом году. Я серьезно думаю, что этот материал может вам очень помочь, я в настоящее время использую эту установку в моем текущем проекте и не могу представить, как можно управлять Дженкинсом по-другому.

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

Вы можете использовать перенаправление оболочки, выполнив оболочку. Например, команда ' sh " echo test > hello.txt "' будет работать по назначению. Просто оберните всю команду чем-то вроде '/bin/sh "java ...>..."'.