Есть 2 способа получить некоторые данные из вашего списка.
1.Jenkins API
Для первых 4 точек из списка вы можете использовать JSON REST API для конкретной сборки, чтобы получить эти данные.Пример конечной точки API:
https://[JENKINS_HOST]/job/[JOB_NAME]/[BUILD_NUMBER]/api/json?pretty=true
1.Какой пользователь запустил конвейер
Это будет под действиями массивом в ответ, идентификатор объекта в массиве по "_ class": "hudson.model.CauseAction" и в нем у вас будет ключ shortDescription , который будет содержать эту информацию:
"actions": [
{
"_class": "hudson.model.CauseAction",
"causes": [
{
"_class": "hudson.triggers.SCMTrigger$SCMTriggerCause",
"shortDescription": "Started by an SCM change"
}
]
},
2.Длительность конвейера
Его можно найти под ключом: «продолжительность».Пример
"duration": 244736,
3.Номер сборки с ее деталями
Я не знаю, какие детали вам нужны, но для номера сборки ищите ключ "number":
"number": 107,
4.Пропуск / сбой конвейера
"result": "SUCCESS",
Если вам нужно извлечь эту информацию для всех сборок, запустите GET-запрос для API задания https://[JENKINS_HOST]/job/[JOB_NAME]/api/json?pretty=true
и извлеките все сборки, затем запустите вышеупомянутый запросза сборку, которую вы извлекли.
Я напишу позже фиктивный скрипт на Python, чтобы сделать именно это.
2.Дамп данных в Jenkinsfile
Существует также возможность вывести часть этой информации из Jenkinfile в пост-действие.
pipeline {
agent any
stages {
stage('stage 1') {
steps {
sh 'echo "Stage 1 time: ${YOUR_TIME_VAR}" > job_data.txt'
}
}
}
post {
always {
sh 'echo "Result: ${result}" > job_data.txt'
sh 'echo "Job name: ${displayName}" > job_data.txt'
sh 'echo "Build number: ${number}" > job_data.txt'
sh 'echo "Duration: ${duration}" > job_data.txt'
archiveArtifacts artifacts: 'job_data.txt', onlyIfSuccessful: false
}
}
}
Список доступных глобальных переменных для конвейерного заданияможно найти:
https://[JENKINS_HOST]/pipeline-syntax/globals#env
Для отдыха вам потребуется реализовать собственную логику в Jenkinsfile.
Ad.5
Создайте переменную, которая содержит информацию о текущем этапе.В начале каждого этапа измените его значение на текущий этап.В конце дампа в файл, как остальные переменные.Если конвейер потерпит неудачу, скажем, на этапе foo в последующем действии, эта переменная будет иметь точно такое же значение, потому что, если конвейер потерпит неудачу, он не перейдет к следующему этапу.
Ad.6 Я не уверен, что вы хотите, трассировку, код ошибки?Я полагаю, вам, вероятно, потребуется реализовать собственную функцию ведения журнала.
Объявление.7 Создать функцию для измерения времени для каждой ступени и значения дампа в конце.
Ad.8 Также не уверен, что вы имеете в виду.Например, артефакты сборки?
В конце каждой сборки этот файл job_data.txt будет архивироваться как артефакт сборки, который можно будет позже загрузить.
Если я найдуболее элегантное и простое решение. Я отредактирую этот пост.
Надеюсь, что это поможет каким-либо образом
РЕДАКТИРОВАТЬ 1
Вот скрипт, который я упоминал ранее.
import requests
username = "USERNAME"
password = "PASSWORD"
jenkins_host = "JENKINS_HOST"
jenkins_job = "JOBNAME"
request_url = "{0:s}/job/{1:s}/api/json".format(
jenkins_host,
jenkins_job,
)
job_data = requests.get(request_url, auth=(username, password)).json()
builds = []
for build in job_data.get('builds'):
builds.append(build.get('number'))
for build in builds:
build_url = "{0:s}/job/{1:s}/{2:d}/api/json".format(
jenkins_host,
jenkins_job,
build,
)
build_data = requests.get(build_url, auth=(username, password)).json()
build_name = build_data.get('fullDisplayName')
build_number = build_data.get('number')
build_status = build_data.get('result')
build_duration = build_data.get('duration')
for action in build_data.get('actions'):
if action.get("_class") == "hudson.model.CauseAction":
build_trigger = action.get('causes')
print(build_name)
print(build_status)
print(build_duration)
print(build_number)
print(build_trigger)
Обратите внимание, что вам может потребоваться авторизация с помощью API Token в зависимости от настроек безопасности.