Как я могу загрузить пронумерованный артефакт сборки из Jenkins с помощью Ansible?

У меня есть сервер Jenkins, с которого я хочу загрузить артефакты сборки. Проблема в том, что при настройке задания артефакт сборки включает номер задания, например. NightlyBuild-346.tar.bz2. Нам нравятся номера работ, потому что они позволяют легко узнать, сколько лет конкретной сборке.

Это становится проблематичным, потому что я не знаю точного имени файла, который я загружаю — я просто знаю, что мне нужна последняя успешная сборка. Я мог бы сделать что-то вроде этого:

- name: download build from CI
  get_url:
    url: "https://ci.contoso.com/job/NightlyBuild/lastSuccessfulBuild/artifact/NightlyBuild-345.tar.bz2"
    dest: /tmp/NightlyBuild-345.tar.bz2

... но это сломается после того, как Дженкинс закончит следующую ночную сборку, потому что артефакт станет NightlyBuild-346.tar.bz2. Я думаю, что у меня есть несколько вариантов здесь:

  • Попробуйте использовать подстановочные знаки в модуле get_url (не уверен в этом)
  • Загрузите ВСЕ артефакты из задания (их несколько) как один archive.zip и используйте командную строку и магию регулярных выражений, чтобы найти фактический артефакт сборки, который мне нужен. (потенциал горячего неуправляемого беспорядка)
  • Используйте REST API, чтобы получить номер задания для последнего успешного задания и сформировать полный URL-адрес. (не уверен, что Ansible позволяет мне устанавливать такие переменные на лету).

Это мои варианты? Есть ли лучший способ сделать это? Я хочу в конечном итоге опубликовать в репозитории Artifactory из Jenkins, и если это правильно, я был бы признателен за некоторые указатели в этом направлении.


person Vishal Kotcherlakota    schedule 13.09.2016    source источник


Ответы (2)


Вы можете запросить у Jenkins номер сборки с помощью модуля uri:

- uri:
    url: http://ci/job/NightlyBuild/lastSuccessfulBuild/buildNumber
    return_content: yes
  register: build_number_resp

- debug: msg="URL with build number http://ci/job/NightlyBuild/lastSuccessfulBuild/artifact/NightlyBuild-{{ build_number_resp.content }}.tar.bz2"
person Konstantin Suvorov    schedule 13.09.2016

Поскольку доступен Ansible 2.0 модуль maven_artifact. Модуль поддерживает координаты версии maven через параметр version. Используйте это так:

- maven_artifact:
    group_id: junit
    artifact_id: junit
    dest: /tmp/junit-latest.jar
    version: latest
    repository_url: htttp://your-artifactory
person Henrik Pingel    schedule 13.09.2016
comment
Пример Константина намного проще, но это тоже хороший подход. - person Vishal Kotcherlakota; 13.09.2016