Эта статья является частью серии Jenkins CLI, в которой мы описываем, как мы создали приложение CLI для выполнения серии параллельных заданий Jenkins в терминале.

Jenkins Jobs Runner — это библиотека на основе Jenkins RxJs, которая позволяет последовательно выполнять n пакетов, каждое из m параллельных заданий. Кроме того, он предоставляет визуальный интерфейс для отображения текущего состояния заданий.

Как это работает?

Jenkins Jobs Runner принимает в качестве входного массива JobBatchDescriptor объекта. Они выражаются через интерфейс:

import { JobBuildOptions } from 'jenkins';
export interface JobBatchDescriptor<T1 = string, T2 = string> {
  displayName: T1;
  jobDescriptor: JobDescriptor<T2>[];
}
export interface JobDescriptor<T = string> {
  displayName: T;
  opts: JobBuildOptions;
}

Затем для каждой партии следует следующая простая схема:

Ожидание выполнения пакета

Этот шаг выполняется следующим образом:

  1. Для каждого задания в пакетном режиме создайте поток отображения
  2. Диспетчер пользовательского интерфейса обновляет пользовательский интерфейс для каждого значения, испускаемого в потоке.
  3. Объединить потоки отображения всех заданий в пакете
  4. Преобразовать его в обещание
  5. Дождитесь завершения комбинированных потоков

Показать поток

Display Stream представляет собой комбинацию исходного потока JobResponse от Jenkins RxJs и наблюдаемого интервала в 1 секунду. 1 секунда — это (вроде) частота обновления пользовательского интерфейса. Его можно выразить с помощью диаграммы:

Комбинированный поток

Комбинированный поток — это комбинация последних выпусков (завершений) потоков отображения всех заданий в пакете. Его можно выразить с помощью диаграммы:

Как это использовать?

Чтобы использовать Jenkins Job Runner, сначала необходимо установить:

npm install jenkins jenkins-rxjs jenkins-jobs-runner

Создайте экземпляр Job Batch Runner:

import { JenkinsRxJs } from 'jenkins-rxjs';
import { JobBatchRunner} from 'jenkins-jobs-runner';
const jenkinsRxJs = new JenkinsRxJs(...);
const jobBatchRunner = new JobBatchRunner(jenkinsRxJs);

Подготовьте массив JobBatchDescriptor:

const jobBatchDescriptors = [
  {
    displayName: 'first group display name',
    jobDescriptor: [
      {
        displayName: 'first job of first group',
        opts: {
          name: 'jenkins-job-name',
          parameters: {
            firstParam: 'value-of-param'
          }
        },
      },
      {
        displayName: 'second one',
        opts: { ... },
      },
    ],
  },
  {
    displayName: 'second group',
    jobDescriptor: [
      {
        displayName: 'only job of a second group',
        opts: { ... },
      },
    ],
  },
];

Выполнить задания:

jobBatchRunner.runBatches(builderResult)
  .then(() => console.log('end'));

Вот и все. jobBatchRunner верните обещание, когда закончите, если вы захотите что-то сделать после этого.

Резюме

Подводя итог, Jenkins Jobs Runner можно использовать для выполнения и отображения состояния пакетов параллельных заданий. Он принимает один входной массив и обрабатывает вызовы Jenkins API, обновляет статус и пользовательский интерфейс. Это позволяет легко интегрировать его в любой рабочий процесс.

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