Вы можете использовать Jenkins API удаленного доступа , чтобы получить машиночитаемое описание текущей сборки, включая ее полный набор изменений. Тонкость здесь заключается в том, что если у вас настроен «тихий период», Jenkins может пакетировать несколько коммитов в один и тот же репозиторий в одну сборку, поэтому полагаться на один номер ревизии немного наивно.
Мне нравится сохранять свои простейшие хуки Subversion после фиксации и передавать их на CI-сервер. Для этого я использую wget для запуска сборки, что-то вроде этого ...
/usr/bin/wget --output-document "-" --timeout=2 \
https://ci.example.com/jenkins/job/JOBID/build?token=MYTOKEN
Затем задание настраивается на стороне Jenkins для выполнения сценария Python, который использует переменную среды BUILD_URL
и строит из этого URL-адрес для API. URL в конечном итоге выглядит так:
https://ci.example.com/jenkins/job/JOBID/BUILDID/api/json/
Вот пример кода Python, который можно запустить внутри сценария оболочки. Я упустил все средства обработки ошибок или HTTP-аутентификации, чтобы они были удобочитаемыми.
import os
import json
import urllib2
# Make the URL
build_url = os.environ['BUILD_URL']
api = build_url + 'api/json/'
# Call the Jenkins server and figured out what changed
f = urllib2.urlopen(api)
build = json.loads(f.read())
change_set = build['changeSet']
items = change_set['items']
touched = []
for item in items:
touched += item['affectedPaths']