2013-05-07 6 views
2

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

SVN A --> build A --\ 
        | 
SVN B --> build B --| 
        | 
SVN C ----------------> build C 

Трубопровод должен работать так, чтобы при внесении изменений в репозиторий SVN любого из проектов, то, что проект строится автоматически. Кроме того, после того, как был построен A или B, он вызывает здание C.

Каждая сборка создает двоичные файлы с уникальным номером версии («XYBuildNumber»), а C должен получить в качестве параметра номера версий обоих A и B, так что C можно построить с использованием этих версий. C должен по умолчанию использовать последние успешные сборки A и B, но также можно запускать C вручную, используя более старую версию A или B (например, если мы хотим развернуть более старую версию одного из проектов).

Создание такого трубопровода можно сделать из коробки Go, но моя компания считает это слишком дорогостоящим. (Обновление 2014-02-27: Go не является открытым исходным кодом и бесплатным!) Итак, теперь я пытаюсь выяснить, как добиться того же самого, используя Jenkins, но еще не нашел пути. Я только нашел инструкции для создания простых линейных и ромбовидных трубопроводов в Дженкинсе, но не для трубопроводов с несколькими независимыми проектами вверх по течению.

+1

ThoughtWorks только что объявил о том, что они будут делать Go бесплатно и с открытым исходным кодом. http://www.thoughtworks.com/news/go-continuous-delivery-now-available-as-free-open-source. Может быть, вы можете попробовать снова. – Srinivas

+0

Yup. Я тоже об этом слышал. :) –

ответ

1

Можно передавать номера версий из вышеперечисленных заданий в нижестоящие задания, используя Copy Artifact Plugin. Запишите номер версии в файл в исходном задании, архивируйте его, а затем используйте этот плагин, чтобы прочитать его в последующей работе. Выберите сборку Upstream, которая вызвала этот проект. и Используйте «Последняя успешная сборка» в качестве резервного варианта в конфигурации плагина.

Для получения дополнительной информации см. Interdependent Build Pipelines with Jenkins.

0

Мы используем build-pipeline-plugin нечто подобное, и что мы делаем, мы предлагаем заводной скрипт, который хранит выполнение создания информации, которая будет передаваться вниз по течению проектов:

Немного многословной, потому что мы включаем SVN информацию для последующих сборок :

import hudson.model.* 
def thr = Thread.currentThread() 
def build = thr?.executable 

def workspace = build.getWorkspace() 

def ant = new AntBuilder() 
ant.exec(executable: "svn", outputproperty: "output", dir: workspace){ 
    arg(line: "info") 
} 
svnInfo = ant.project.getProperty("output") 
print svnInfo 

def pattern = /Last\s+Changed\s+Author:\s+(\w+)/ 
def matcher = (svnInfo =~ pattern) 
def user = matcher[0][1] 

def langs = new XmlParser().parseText(build.getParent().getWorkspace().child('pom.xml').readToString()) 
def appVer = langs.properties.release.text() 
def artifactId = langs.artifactId.text() 

def params = [ 
new StringParameterValue('PL_SVN_REVISION', build.getEnvVars()['SVN_REVISION']), 
new StringParameterValue('PL_BUILD_NUMBER', build.getEnvVars()['BUILD_NUMBER']), 
new StringParameterValue('PL_APP_NAME', 'FooApp'), 
new StringParameterValue('PL_COMMITTER_NAME',user), 
new StringParameterValue('PL_APP_VERSION',appVer), 
new StringParameterValue('PL_ARTIFACT_ID',artifactId) 
] 
build.addAction(new ParametersAction(params)) 

Затем в сборке вниз по течению они должны быть доступны как так:

пример 1, Набора построить Имя входа:

#${BUILD_NUMBER} - ${ENV,var="PL_APP_NAME"} - ${ENV,var="PL_APP_VERSION"} - ${ENV,var="PL_SVN_REVISION"} 

Пример 2, Invoke Ant целевой входной сигнал:

deploy 
    -Denvironment=ONT-base 
    -DWAR-LOCATION=%war-repo%/%PL_APP_NAME%/%PL_BUILD_NUMBER%-%PL_SVN_REVISION%/ 
    -DWAR-NAME=%PL_ARTIFACT_ID%-%PL_APP_VERSION%.%PL_BUILD_NUMBER%-%PL_SVN_REVISION%.war 

Осторожно Однако, при повторном использовании ниже по потоку проекта в нескольких добывающих проектах, так как есть outstanding bug with variables not being passed down correctly.

+0

Это выглядит полезным для проблемы, с которой я сталкиваюсь, но не совсем ясно, что именно вы делаете или почему.Не могли бы вы немного разъяснить свое объяснение (возможно, добавьте некоторые комментарии к коду)? – Jared

 Смежные вопросы

  • Нет связанных вопросов^_^