2017-02-07 10 views
1

У меня есть проект, который строится на основе фиксации SVN. Когда этот проект преуспевает, он запускает проект для работы на подчиненном устройстве.Как получить номер версии SVN проекта master/upstream во время ведомой задачи?

Как получить версию SVN исходного/триггерного проекта в подчиненном устройстве?

ответ

1

При запуске нисходящего задания используйте Parameterized Trigger Plugin () под номером Trigger parameterized build on other projects) и поставьте версию svn в качестве параметра. Вы можете сделать это двумя способами:

  1. Subversion revision параметр, то убедитесь, что если вы проверить тот же источник в вас вниз по течению работы, он будет проверить ту же версию, что и в верхнем течении (т.е. он копирует скрытый SVN Revision Action, который хранится с восходящей строкой).
  2. Если вас интересует только ревизия, добавьте параметр Predefined parameters и привяжите значение SVN_REVISION к переменной. Затем эта переменная будет доступна в задании ниже по течению.

The trigger parameterized build post build action

Here is a related discussion, которая затрагивает проблемы с помощью параметра Subversion revision, это не 100% очевидным для пользователя, что ревизии SVN, что было распространено.

+2

Это будет работать, но обратите внимание, что введение параметров изменит поведение очередей - будет создана нисходящая сборка для _each и each upstream_ run. Обычно (без параметров) Дженкинс объединяет несколько триггеров нисходящего потока, если его выполнение не может идти в ногу с восходящим потоком. Такой сценарий довольно распространен, когда у вас есть относительно быстрое задание построения с медленным заданием вниз по течению для выполнения тестов регрессии. –

+0

Это правда, я бы сказал, что эти два решения дополняют друг друга в зависимости от того, какое поведение вы не достигли ... Однако вопрос неясен. –

+0

К сожалению, я не думаю, что могу использовать это - проект downstram не подключен к svn и не является параметризованной сборкой. Извините, я не был так ясен с моим вопросом. это полезная информация для меня, независимо от того, как я могу ее использовать в других местах.спасибо – Tim

1

Вы можете получить информацию о восходящем потоке (и многое другое) через Groovy. Следующий сценарий в «Execute системы Groovy сценария» шаг сборки будет делать то, что вы хотите: выход

import jenkins.model.* 

// find latest upstream build that triggerd this run (there may be several iff queued) 
def latestCause = build.causes.findAll { 
    it.class.toString() == 'class hudson.model.Cause$UpstreamCause' 
}.max({ it.getUpstreamBuild() }) 

// determine upstream project name and build number 
def upstreamProjectName = latestCause.upstreamProject 
def upstreamBuildNum  = latestCause.upstreamBuild 
println "upstreamProject = ${upstreamProjectName}" 
println "upstreamBuildNum = ${upstreamBuildNum}" 

// find corresponding upstream job and build objects 
def upstreamJob = Jenkins.instance.getItemByFullName(upstreamProjectName) 
def upstreamBuild = upstreamJob.getBuildByNumber(upstreamBuildNum) 

// print subversion revision info 
def state = upstreamBuild.getAction(hudson.scm.SCMRevisionState.class) 
state.revisions.each { location, revision -> 
    println "upstream url/rev: ${location}/${revision}" 
} 

Пример:

upstreamProject = svn-upstream-project 
upstreamBuildNum = 16 
upstream url/rev: https://svn.example.com/foo/bar/12345 

Вам не нужно проходить какие-либо «вверх» информация явно к нисходящему проекту. Это проще в обслуживании, а также поведение очередности нисходящего потока не изменится (см. Мой комментарий к другому ответу). Это важно, если ваше выполнение в нисходящем потоке занимает больше времени, чем то, что доступно между версиями выше по течению - в противном случае у вас будет постоянно растущая очередь сборки.

Вы можете изготовить особенно хорошие решения, если вы использовать сценарий, как выше и объединить его с Script SCM plugin. Например, вы можете синхронизировать нижестоящие изменения (уведомления об уведомлениях об участниках) и восходящие проекты без подключения нисходящего потока к SCM. Это типичная настройка при подключении «задания сборки» и одного (или более) «тестовых заданий».

+0

Это именно то поведение, которое я хочу - задание «ребенок» не подключено к SVN/SCM и не настроено как параметризованная сборка. И как я могу обратиться к этой версии svn вверх по потоку? (например, я хочу поместить его в уведомление по электронной почте) – Tim

+1

См. этот вопрос: http://stackoverflow.com/questions/10413936/creating-a-jenkins-environment-variable-using-groovy в основном, вы вводите его как параметр в сборку –

+0

Я бы не стал беспокоиться о решении, которое явно вводит переменные для ручных изменений и уведомлений. С помощью скрипта SCM вы можете агрегировать восходящие изменения из нескольких (поставленных в очередь) триггеров восходящего потока в нисходящем потоке, отображать эти изменения _as, если бы нисходящий поток был напрямую подключен к SCM, а также триггеры уведомлений будут работать как обычно. Это несколько строк кода Groovy, но IMHO стоит того. –