Эта статья является частью серии 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; }
Затем для каждой партии следует следующая простая схема:
Ожидание выполнения пакета
Этот шаг выполняется следующим образом:
- Для каждого задания в пакетном режиме создайте поток отображения
- Диспетчер пользовательского интерфейса обновляет пользовательский интерфейс для каждого значения, испускаемого в потоке.
- Объединить потоки отображения всех заданий в пакете
- Преобразовать его в обещание
- Дождитесь завершения комбинированных потоков
Показать поток
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 для лучшего понимания.