Рубрики
Без рубрики

Получение Jenkins Jobsys по строению государства с Python

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Я работаю с Python и Jenkins много в последнее время и недавно нуждался в том, чтобы найти способ проверить состояние работы на уровне сборки. Я обнаружил jenkinsapi Пакет и играл с ним, чтобы увидеть, дадут ли он мне возможность сверлять на уровень сборки и результатов в Дженкинсах.

В сборках, которые я бегу, есть x количество подразделений. Каждая из этих подразделений может пройти или потерпеть неудачу. Если один из них не удается, вся сборка помечена желтым цветом и помечена как «нестабильно», что не удалось в моей книге. Я хочу, чтобы способ отследить, какой из этих подразделений не может и как часто за период времени. Некоторые из этих рабочих мест могут быть нестабильными, потому что они получают доступ к сетевым ресурсам, которые другие, возможно, были нарушены недавнему коммитарию к кодовой базе.

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

Установка предварительных условий

jenkinsapi Пакет прост в установке, потому что он совместим. Вы можете установить его в основную установку Python или в виртуальной среде Python, используя следующую команду:

Пип Установите Jenkinsapi

Вам также нужно будет установить Запросы , который также совместим к PIP:

PIP Установка запросов

Это единственные пакеты, которые вам нужны. Теперь вы можете перейти к следующему разделу!

Запрос Дженкинс

Первый шаг, который вы захотите достичь, является получение рабочих мест по их статусу. Стандартные состояния, которые вы найдете в Дженкинсах, являются успешным, нестабильным или прерванным.

Давайте напишем какой-нибудь код, чтобы найти только нестабильные задания:

from jenkinsapi.jenkins import Jenkins
from jenkinsapi.custom_exceptions import NoBuildData
from requests import ConnectionError

def get_job_by_build_state(url, view_name, state='SUCCESS'):
    server = Jenkins(url)
    view_url = f'{url}/view/{view_name}/'
    view = server.get_view_by_url(view_url)
    jobs = view.get_job_dict()

    jobs_by_state = []

    for job in jobs:
        job_url = f'{url}/{job}'
        j = server.get_job(job)
        try:
            build = j.get_last_completed_build()
            status = build.get_status()
            if status == state:
                jobs_by_state.append(job)
        except NoBuildData:
            continue
        except ConnectionError:
            pass

    return jobs_by_state

if __name__ == '__main__':
    jobs = get_job_by_build_state(url='http://myJenkins:8080', view_name='VIEW_NAME',
                                  state='UNSTABLE')

Здесь вы создаете экземпляр Дженкинс и назначить его Сервер Отказ Тогда вы используете get_view_by_url () Чтобы получить указанное имя представления. Вид в основном является набор соответствующих заданий, которые вы настроили. Например, вы можете создать группу рабочих мест, которые используют DEV/OPS Type Thys и помещают их в представление Utils.

Как только у вас есть Вид объект, вы можете использовать get_job_dict () Чтобы получить вам словарь всех рабочих мест в этом представлении. Теперь, когда у вас есть словарь, вы можете зацикливаться над ними и получить отдельные задания внутри вида. Вы можете получить работу, позвонив на объект женкина get_job () метод. Теперь, когда у вас есть объект работы, вы, наконец, можете просрочить себя на саму построение.

Чтобы предотвратить ошибки, я обнаружил, что вы можете использовать get_last_completed_build () Чтобы получить последнюю полностью построить. Это для лучшего, как будто вы используете get_build () И сборка не закончила, объект сборки не может иметь содержимого, которое вы ожидаете в этом. Теперь, когда у вас есть сборка, вы можете использовать get_status () Чтобы получить его статус и сравнить его с тем, который вы передали. Если они совпадают, то вы добавляете эту работу в jobs_by_state который является списком Python.

Вы также поймаете пару ошибок, которые могут произойти. Вы, вероятно, не увидите Nobuilddata Если работа не была прервана или на вашем сервере что-то действительно странное. ConnectionError Исключение происходит при попытке подключения к URL-адресу, которое не существует или не в автономном режиме.

В этот момент вы теперь должны иметь список заданий, отфильтрованных к статусу, который вы просили.

Если вы хотите пройти дальше на подразделение в рабочее задание, то вам нужно позвонить в сборку has_resultset () Метод проверки того, что есть результаты для проверки. Тогда вы можете сделать что-то вроде этого:

resultset = build.get_resultset()
for item in resultset.items():
    # do something here

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

Обертывание

На данный момент вам должно быть достаточно информации, чтобы начать копаться в внутренних органах Дженкина, чтобы получить необходимую информацию. Я использовал вариацию этого скрипта, чтобы помочь мне извлечь информацию о сборках, которые не смогли помочь мне обнаружить задания, которые потерпели неудачу неоднократно раньше, чем я бы иначе. Документация для jenkinsapi К сожалению, не очень подробно, поэтому вы будете проводить много времени в отладчике, пытаясь выяснить, как это работает. Однако он работает довольно хорошо в целом, как только вы его поняли.