Подтвердить что ты не робот

От Jenkins, как мне получить список текущих рабочих заданий в JSON?

Я могу узнать обо всем о моем сервере Jenkins через Remote API, но не о списке текущих выполняемых заданий.

Это,

http://my-jenkins/computer/api/json

или

http://my-jenkins/computer/(master)/api/json

Казалось бы, самые логичные варианты, но они ничего не говорят (кроме количества заданий) о том, какие задания фактически выполняются.

4b9b3361

Ответ 1

У меня есть представление, определяемое с помощью Просмотр плагина фильтров заданий, который фильтрует только текущие рабочие задания, тогда вы можете использовать /api/json в представлении чтобы просмотреть только выполняемые задания. У меня также есть один для прерванных, нестабильных и т.д.

UPDATE

Выберите "Редактировать вид" → Фильтры заданийAdd Job Filter   ▼ Фильтр статусов сборки
   Строить статусы: ☑ В настоящее время строит
   Тип соответствия: Исключить непревзойденный -...

Ответ 2

В Jenkins часто возникает путаница между заданиями и строками, особенно потому, что задания часто называются "заданиями сборки".

  • Задания (или "строить задания" или "проекты" ) содержат конфигурацию, которая описывает, что нужно запускать и как ее запускать.
  • Строки - это выполнение задания. Строка содержит информацию о времени начала и окончания, состоянии, протоколировании и т.д.

Подробнее см. https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project.

Если вам нужны задания, которые в настоящее время строятся (т.е. имеют один или несколько запусков сборки), самым быстрым способом является использование REST API с XPath для фильтрации по цвета, которые заканчиваются на _anime, например:

http://jenkins.example.com/api/xml?tree=jobs[name,url,color]&xpath=/hudson/job[ends-with(color/text(),%22_anime%22)]&wrapper=jobs

даст вам что-то вроде:

<jobs>
  <job>
    <name>PRE_DB</name>
    <url>http://jenkins.example.com/job/my_first_job/</url>
    <color>blue_anime</color>
  </job>
  <job>
    <name>SDD_Seller_Dashboard</name>
    <url>http://jenkins.example.com/job/my_second_job/</url>
    <color>blue_anime</color>
  </job>
</jobs>

Jenkins использует поле color, чтобы указать статус задания, где суффикс _anime указывает, что в настоящее время выполняется задание.

К сожалению, это не даст вам никакой информации о фактическом запуске сборки. Несколько экземпляров задания могут работать одновременно, а работающая сборка не всегда является последней.

Если вы хотите перечислить все запущенные сборки, вы также можете использовать REST API для быстрого ответа, например:

http://jenkins.example.com/computer/api/xml?tree=computer[executors[currentExecutable[url]],oneOffExecutors[currentExecutable[url]]]&xpath=//url&wrapper=builds

Вы получите что-то вроде:

<builds>
  <url>http://jenkins.example.com/job/my_first_job/1412/</url>
  <url>http://jenkins.example.com/job/my_first_job/1414/</url>
  <url>http://jenkins.example.com/job/my_second_job/13126/</url>
</builds>

Здесь вы видите список всех запущенных в данный момент сборок. Вам нужно будет проанализировать URL-адрес, чтобы отделить имя задания от номера сборки. Обратите внимание, что my_first_job имеет две сборки, которые в настоящее время запущены.

Ответ 3

Немного взлома, но я думаю, вы можете сделать вывод о том, какие задания выполняются в настоящее время, глядя на цветной ключ в объектах задания, когда вы выполняете GET в /jenkins/api/json?pretty=true. Если значок "шарик" для заданного задания в Jenkins анимирован, мы знаем, что он работает.

Посмотрите на массив объектов задания в ответе JSON:

{
 ...
  "jobs" : [
    {
      "name" : "Test Job 1",
      "url" : "http://localhost:8000/jenkins/job/Test%20Job%201/",
      "color" : "blue"
    },
    {
      "name" : "Test Job 2",
      "url" : "http://localhost:8000/jenkins/job/Test%20Job%202/",
      "color" : "blue_anime"
    }
  ...
}

В этом случае "color" : "blue_anime" указывает, что задание в данный момент запущено, а "color" : "blue" указывает, что задание не запущено.

Надеюсь, что это поможет.

Ответ 4

Вы можете сделать это с помощью дерева jenkins api, используя конечную точку, подобную этой:

http://<host>/api/json?tree=jobs[name,lastBuild[building,timestamp]]

Вы можете увидеть, какие атрибуты из lastBuild вы можете использовать, если имеете доступ к <job-endpoint>/lastBuild/api/json.

Ответ 5

Маршал выход и фильтр для "building: true" из следующего вызова json api на задание с деревом, чтобы отфильтровать посторонний материал (надеюсь, это поможет):

http://jenkins.<myCompany>.com/job/<myJob>/api/json?pretty=true&depth=2&tree=builds[builtOn,changeSet,duration,timestamp,id,building,actions[causes[userId]]]

даст вам что-то вроде:

{
  "builds" : [
{
  "actions" : [
    {

    },
    {
      "causes" : [
        {
          "userId" : "cheeseinvert"
        }
      ]
    },
    {

    },
    {

    },
    {

    },
    {

    }
  ],
  "building" : true,
  "duration" : 0,
  "id" : "2013-05-07_13-20-49",
  "timestamp" : 1367958049745,
  "builtOn" : "serverA",
  "changeSet" : {

  }
}, ...

Ответ 6

У меня была аналогичная проблема, когда некоторые сборки трубопроводов застревают в состоянии здания после того, как я перезапускаю jenkins (рабочие задания предполагаются долговечными и возобновляются, но большую часть времени они застряли бесконечно).

Эти сборки не используют исполнителя, поэтому единственный способ найти их - открыть каждую работу.

Все остальные ответы, похоже, работают, когда проект считается зданием, т.е. последняя сборка строится. Но они игнорируют прежние сборки, которые все еще строятся.

Следующий запрос работает для меня и дает мне все текущие запущенные сборки, т.е. они не имеют результата.

http://localhost:8080/api/xml?tree=jobs[name,builds[fullDisplayName,id,number,timestamp,duration,result]]&xpath=/hudson/job/build[count(result)=0]&wrapper=builds